티스토리 뷰

728x90

 

[ 코딩 테스트 연습 ]

 
 
 
 
 
 

111. 최댓값 만들기 (2) 

  • 정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
  • 제한사항 :
    • -10,000 ≤ numbers의 원소 ≤ 10,000
    • 2 ≤ numbers 의 길이 ≤ 100
  • 내가 푼 풀이
def solution(numbers):
     numbers.sort()
     return max(numbers[-1] * numbers[-2], numbers[0] * numbers[1])

print(solution([1, 2, -3, 4, -5]))
# 출력 : 15

 

 

  • 다른 사람의 풀이
def solution(numbers):
    answer = -100000000

    for i in range(len(numbers)):
        for j in range(i+1, len(numbers)):
            if numbers[i] * numbers[j] > answer:
                answer = numbers[i] * numbers[j]

    return answer
def solution(numbers):

    return max([k * j for i, k in enumerate(numbers) for j in numbers[i + 1:]])

 

 

 

 

 

 

 

 

112. 주사위의 개수 

  • 머쓱이는 직육면체 모양의 상자를 하나 가지고 있는데 이 상자에 정육면체 모양의 주사위를 최대한 많이 채우고 싶습니다. 상자의 가로, 세로, 높이가 저장되어있는 배열 box와 주사위 모서리의 길이 정수 n이 매개변수로 주어졌을 때, 상자에 들어갈 수 있는 주사위의 최대 개수를 return 하도록 solution 함수를 완성해주세요.
  • 제한사항 :
    • box의 길이는 3입니다.
    • box[0] = 상자의 가로 길이
    • box[1] = 상자의 세로 길이
    • box[2] = 상자의 높이 길이
    • 1 ≤ box의 원소 ≤ 100
    • 1 ≤ n ≤ 50
    • n  box의 원소
    • 주사위는 상자와 평행하게 넣습니다.
  • 내가 푼 풀이
def solution(box, n):
    result = 1
    for i in box:
        result *= i // n
    return result

print(solution([10, 8, 6], 3))
# 출력 : 12

 

  • 다른 사람의 풀이
def solution(box, n):
    x, y, z = box
    return (x // n) * (y // n) * (z // n )
def solution(box, n):
    w,h,d = box[0]//n,box[1]//n,box[2]//n 
    return w*d*h
def solution(box, n):
    answer = 0
    a = box[0] // n
    b = box[1] // n
    c = box[2] // n
    return a * b * c

 

 

 

 

 

 

 

 

113. 직각삼각형 출력하기 

  • "*"의 높이와 너비를 1이라고 했을 때, "*"을 이용해 직각 이등변 삼각형을 그리려고합니다. 정수 n 이 주어지면 높이와 너비가 n 인 직각 이등변 삼각형을 출력하도록 코드를 작성해보세요.
  • 제한사항 : 1 ≤ n ≤ 10
  • 내가 푼 풀이
n = int(input())

for i in range(1, n + 1):
    print('*' * i)

 

 

 

 

 

 

 

 

 

 

114. 특별한 이차원 배열 2 

  • n × n 크기의 이차원 배열 arr이 매개변수로 주어질 때, arr이 다음을 만족하면 1을 아니라면 0을 return 하는 solution 함수를 작성해 주세요.
    • 0 ≤ i, j < n인 정수 i, j에 대하여 arr[ i ][ j ] = arr[ j ][ i ]
  • 제한사항 :
    • 1 ≤ arr의 길이 = arr의 원소의 길이 ≤ 100
    • 1 ≤ arr의 원소의 원소 ≤ 1,000
    • 모든 arr의 원소의 길이는 같습니다.
  • 내가 푼 풀이
def solution(arr):
    n = len(arr)
    for i in range(n):
        for j in range(i + 1, n):
            if arr[i][j] != arr[j][i]:  # 대칭되는 원소가 다른 경우
                return 0
    return 1

print(solution([[5, 192, 33], [192, 72, 95], [33, 95, 999]]))
# 출력 : 1

 

 

  • 다른 사람의 풀이
def solution(arr):
    return int(arr == list(map(list, zip(*arr))))
def solution(arr):
    return int(all(arr[i][j] == arr[j][i] for i in range(len(arr)) for j in range(len(arr))))

 

 

 

 

 

 

 

 

115. 문자열 정렬하기 (1)

  • 문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.
  • 제한사항 :
    • 1 ≤ my_string의 길이 ≤ 100
    • my_string에는 숫자가 한 개 이상 포함되어 있습니다.
    • my_string은 영어 소문자 또는 0부터 9까지의 숫자로 이루어져 있습니다
  • 내가 푼 풀이
def solution(my_string):
    num = []

    for i in my_string:
        if i.isdigit(): # isdigit() 는 숫자만 판별하여 추출
            num.append(int(i))

    return sorted(num)

print(solution("hi12392"))
# 출력 : [1, 2, 2, 3, 9]

 

 

  • 다른 사람의 풀이
def solution(my_string):
    return sorted([int(c) for c in my_string if c.isdigit()])
def solution(my_string):
    return sorted(map(int, filter(lambda s: s.isdigit(), my_string)))
def solution(my_string):
    numbers = []

    for char in my_string:
        ascii_value = ord(char)  # 문자의 ASCII 코드 값
        if 48 <= ascii_value <= 57:  # 숫자의 ASCII 코드 범위
            numbers.append(int(char))

    return sorted(numbers)

 

#숫자 판별 함수 #isnumeric() isdigit() isdecimal() #isnumeric() : 숫자값 표현이면 모두(제곱 등 다른 표현도 가능) True #isdigit() : 숫자처럼 생겼으면 True #isdicimal() : int로 변환가능한 수만 True

 

 

 

 

 

 

 

116. 인덱스 바꾸기 

  • 문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때, my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
  • 제한사항 :
    • 1 < my_string의 길이 < 100
    • 0 ≤ num1, num2 < my_string의 길이
    • my_string은 소문자로 이루어져 있습니다.
    • num1  num2
  • 내가 푼 풀이
def solution(my_string, num1, num2):
    str_list = list(my_string) #인덱스
    str_list[num1], str_list[num2] = str_list[num2], str_list[num1]
    # 교환
    return ''.join(str_list) # join으로 합침

print(solution("hello",1,2))
# 출력 : hlelo

 

 

 

 

 

 

 

 

 

117. 콜라츠 수열 만들기 

  • 모든 자연수 x에 대해서 현재 값이 x이면 x가 짝수일 때는 2로 나누고, x가 홀수일 때는 3 * x + 1로 바꾸는 계산을 계속해서 반복하면 언젠가는 반드시 x가 1이 되는지 묻는 문제를 콜라츠 문제라고 부릅니다.계산 결과 1,000 보다 작거나 같은 수에 대해서는 전부 언젠가 1에 도달한다는 것이 알려져 있습니다.
  • 임의의 1,000 보다 작거나 같은 양의 정수 n이 주어질 때 초기값이 n인 콜라츠 수열을 return 하는 solution 함수를 완성해 주세요.
  • 그리고 위 과정에서 거쳐간 모든 수를 기록한 수열을 콜라츠 수열이라고 부릅니다.
  • 제한사항 : 1 ≤ n ≤ 1,000
  • 내가 푼 풀이
def solution(n):
    C_list = [n]  # 초기값 먼저 넣어줘야함

    while n != 1:  # n이 1이 될 때까지 반복
        if n % 2 == 0: # 짝수 일때
            n //= 2    # 2로 나눈 몫을 넣기
        else:          # 홀수
            n = 3 * n + 1
        C_list.append(n)  # 계산한 모든 값을 리스트에 넣기

    return C_list

print(solution(10))
# 출력 : [10, 5, 16, 8, 4, 2, 1]

 

 

  • 다른 사람의 풀이 
def solution(n):
    l = [n]
    while l[-1] != 1:
        if l[-1] % 2:
            l.append(3*l[-1]+1)
        else:
            l.append(l[-1]//2)
    return l
def solution(n):
    answer = []

    if 1 <= n <= 1000:
        x = n

        while 1:
            answer.append(x);
            if x == 1:
                break
            if x % 2 == 0:
                x /= 2
            else:
                x = 3 * x + 1

    return answer

 

 

 

 

 

 

 

 

118. 특별한 이차원 배열 1 

  • 정수 n이 매개변수로 주어질 때, 다음과 같은 n × n 크기의 이차원 배열 arr를 return 하는 solution 함수를 작성해 주세요.
    • arr[ i ][ j ] (0 ≤ i, j < n)의 값은 i = j라면 1, 아니라면 0입니다.
  • 제한사항 : 1 ≤ n ≤ 100
  • 내가 푼 풀이
def solution(n):
    arr = [[0] * n for _ in range(n)]  
    # n x n 크기의 2차원 배열 생성

    for i in range(n):
        arr[i][i] = 1  # 대각선 원소는 1로 설정

    return arr

print(solution(3))
# 출력 : [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
  • [0] * n을 통해 길이가 n인 리스트 [0, 0, ..., 0]을 생성합니다. 이렇게 생성된 리스트들이 리스트 컴프리헨션을 통해 한 행씩 모여 2차원 배열을 만든다.

 

 

 

 

 

 

 

119. 문자 리스트를 문자열로 변환하기 

  • 문자들이 담겨있는 배열 arr가 주어집니다. arr의 원소들을 순서대로 이어 붙인 문자열을 return 하는 solution함수를 작성해 주세요.
  • 제한사항 :
    • 1 ≤ arr의 길이 ≤ 200
      • arr의 원소는 전부 알파벳 소문자로 이루어진 길이가 1인 문자열입니다.
  • 내가 푼 풀이
def solution(str_list):
    answer = ''
    for i in str_list:
        answer += i
    return answer

print(solution(["a","b","c"]))
# 출력 : abc

 

 

  • 다른 사람의 풀이 
def solution(arr):
    return ''.join(arr)
solution = lambda l: ''.join(l)

 

 

 

 

 

 

 

 

 

120. 배열 만들기 3 

  • 정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다.이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.
  • intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.
  • 제한사항 :
    • 1 ≤ arr의 길이 ≤ 100,000
      • 1 ≤ arr의 원소 < 100
    • 1 ≤ a1  b1 < arr의 길이
    • 1 ≤ a2  b2 < arr의 길이
  • 내가 푼 풀이
def solution(arr, intervals):
    A = arr[intervals[0][0]:intervals[0][1] + 1]
    B = arr[intervals[1][0]:intervals[1][1] + 1]

    new_arr = A + B

    return new_arr

print(solution([1, 2, 3, 4, 5],[[1, 3], [0, 4]]))
# 출력 : [2, 3, 4, 1, 2, 3, 4, 5]

 

  • 다른 사람의 풀이
def solution(arr, intervals):
    s1, e1 = intervals[0]
    s2, e2 = intervals[1]
    return arr[s1:e1+1] + arr[s2:e2+1]
def solution(arr, intervals):
    answer = []
    for a,b in intervals:
        answer += arr[a:b+1]
    return answer
def solution(arr, intervals):
    answer = []

    for i,j in enumerate(intervals):
        sp = intervals[i][0]
        ep = intervals[i][1]

        answer += arr[sp:ep+1]
    return answer

 

 

 

 

 

 

반응형
반응형
TAG
more
최근에 올라온 글