티스토리 뷰

728x90

 

 

[ 코딩 테스트 연습 ]

 
 
 
 
 
 

151. 문자열 섞기 

  • 길이가 같은 두 문자열 str1과 str2가 주어집니다.
  • 두 문자열의 각 문자가 앞에서부터 서로 번갈아가면서 한 번씩 등장하는 문자열을 만들어 return 하는 solution 함수를 완성해 주세요.
  • 제한사항 :
    • 1 ≤ str1의 길이 = str2의 길이 ≤ 10
      • str1과 str2는 알파벳 소문자로 이루어진 문자열입니다.
  • 내가 푼 풀이
def solution(str1, str2):
    return ''.join([c1 + c2 for c1, c2 in zip(str1, str2)]) + str1[len(str2):] + str2[len(str1):]

print(solution('aaaaa','bbbbb'))
# 출력: ababababab

 

 

  •  다른 사람의 풀이
def solution(str1, str2):
    answer = ''.join([str1[i] + str2[i] for i in range(len(str1))])
    return answer
def solution(str1, str2):
    answer = ''
    for i in range(0,len(str1)):
        answer = answer + str1[i] + str2[i]
    return answer

 

 

 

 

 

 

 

 

 

152. 두 정수 사이의 합 

  • 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
    예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
  • 제한사항 :
    • a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
    • a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
    • a와 b의 대소관계는 정해져있지 않습니다.
  • 내가 푼 풀이
def solution(a, b):
    return sum(range(min(a, b), max(a, b) + 1))

print(solution(3,5))
# 출력: 12

 

  •  다른 사람의 풀이 
def adder(a, b):
    if a > b:
        a, b = b, a
    return sum(range(a, b + 1))

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print( adder(3, 5))

 

 

 

 

 

 

 

153. 중복된 문자 제거 

  • 문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.
  • 제한사항 :
    • 1 ≤ my_string ≤ 110
    • my_string은 대문자, 소문자, 공백으로 구성되어 있습니다.
    • 대문자와 소문자를 구분합니다.
    • 공백(" ")도 하나의 문자로 구분합니다.
    • 중복된 문자 중 가장 앞에 있는 문자를 남깁니다.
  • 내가 푼 풀이
def solution(my_string):
    return ''.join(sorted(set(my_string), key=my_string.index))

print(solution("We are the world"))
# 출력: We arthwold
    1. set(string):
      • 주어진 문자열 string을 set으로 변환합니다. set은 중복된 값을 허용하지 않으므로, 중복된 문자가 제거됩니다.
    2. sorted(..., key=string.index):
      • set으로 변환된 문자열을 정렬합니다. 여기서 key=string.index는 정렬 기준을 문자열의 원래 순서로 지정합니다. 따라서 중복을 제거한 문자열의 각 문자는 원래 문자열에서의 순서를 유지하게 됩니다.

 

  •  다른 사람의 풀이
def solution(my_string):
    return ''.join(dict.fromkeys(my_string))
def solution(my_string):
    answer = ''
    for i in my_string:
        if i not in answer:
            answer+=i
    return answer
def solution(my_string):
    answer = ''
    for i in range(len(my_string)):
        if my_string[i] not in answer:
            answer += my_string[i]
    return answer

 

 

 

 

 

 

 

154. 날짜 비교하기 

  • 정수 배열 date1과 date2가 주어집니다. 두 배열은 각각 날짜를 나타내며 [year, month, day] 꼴로 주어집니다. 각 배열에서 year는 연도를, month는 월을, day는 날짜를 나타냅니다.
  • 만약 date1이 date2보다 앞서는 날짜라면 1을, 아니면 0을 return 하는 solution 함수를 완성해 주세요.
  • 제한사항 :
    • date1의 길이 = date2의 길이 = 3
      • 0 ≤ year ≤ 10,000
      • 1 ≤ month ≤ 12
      • day는 month에 따라 가능한 날짜로 주어집니다.
  • 내가 푼 풀이
def solution(date1, date2):
    year1, month1, day1 = date1
    year2, month2, day2 = date2

    # date1이 date2보다 앞서는지 여부를 비교합니다.
    if year1 < year2 or (year1 == year2 and month1 < month2) or (year1 == year2 and month1 == month2 and day1 < day2):
        return 1
    else:
        return 0

print(solution([2021, 12, 28],[2021, 12, 29]))
# 출력: 1

 

  • 다른 사람의 풀이
def solution(date1, date2):
    return int(date1 < date2)
def solution(date1, date2):
    for i in range(3):
        if date1[i]<date2[i]:return 1
        elif date2[i]<date1[i]: return 0
    return 0
def solution(date1, date2):
    answer = 0
    a=int(str(date1[0])+str(date1[1])+str(date1[2]))
    b=int(str(date2[0])+str(date2[1])+str(date2[2]))
    if a<b:
        answer+=1
    else:
        answer+=0
    return answer

 

 

 

 

 

 

 

 

 

155. 수열과 구간 쿼리 1 

  • 정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e] 꼴입니다.위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
  •  query마다 순서대로 s  i  e인 모든 i에 대해 arr[i]에 1을 더합니다.
  • 제한사항 :
    • 1 ≤ arr의 길이 ≤ 1,000
      • 0 ≤ arr의 원소 ≤ 1,000,000
    • 1 ≤ queries의 길이 ≤ 1,000
      • 0 ≤ s  e < arr의 길이
  • 내가 푼 풀이
def solution(arr, queries):
    for query in queries:
        s, e = query
        # s부터 e까지의 구간에 대해 arr[i]에 1을 더합니다.
        for i in range(s, e + 1):
            arr[i] += 1
    return arr

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

 

  • 다른 사람의 풀이 
def solution(arr, queries):
    for (s, e) in queries:
        arr = [a+1 if s <= i <= e else a for i, a in enumerate(arr)]
    return arr

 

 

 

 

 

 

 

 

 

156. 이차원 배열 대각선 순회하기 

  • 2차원 정수 배열 board와 정수 k가 주어집니다.
  • i + j <= k를 만족하는 모든 (i, j)에 대한 board[i][j]의 합을 return 하는 solution 함수를 완성해 주세요.
  • 제한사항 :
    • 1 ≤ board의 길이 ≤ 100
    • 1 ≤ board[i]의 길이 ≤ 100
      • 1 ≤ board[i][j] ≤ 10,000
      • 모든 board[i]의 길이는 같습니다.
    • 0 ≤ k < board의 길이 + board[i]의 길이
  • 내가 푼 풀이
def solution(board, k):
    total = 0
    for i in range(len(board)):
        for j in range(len(board[i])):
            if i + j <= k:
                total += board[i][j]
    return total

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

 

 

  •  다른 사람의 풀이
def solution(board, k):
    return sum(board[i][j] for i in range(len(board)) for j in range(len(board[0])) if i + j <= k)
def solution(board, k):
    answer = 0
    n, m = len(board), len(board[0])

    for i in range(n):
        for j in range(m):
            if i + j <= k:
                answer += board[i][j]
            else:
                break
    return answer

 

 

 

 

 

 

 

157. 문자열 뒤집기 

  • 문자열 my_string과 정수 s, e가 매개변수로 주어질 때, my_string에서 인덱스 s부터 인덱스 e까지를 뒤집은 문자열을 return 하는 solution 함수를 작성해 주세요.
  • 제한사항 :
    • my_string은 숫자와 알파벳으로만 이루어져 있습니다.
    • 1 ≤ my_string의 길이 ≤ 1,000
    • 0 ≤ s  e < my_string의 길이
  • 내가 푼 풀이
def solution(my_string, s, e):
    return my_string[:s] + my_string[s:e+1][::-1] + my_string[e+1:]

print(solution("Progra21Sremm3",6,12))
# 출력: ProgrammerS123

 

  •  다른 사람의 풀이 
def solution(my_string, s, e):
    substr = reversed(list(my_string[s:e+1]))
    return my_string[:s] + ''.join(substr) + my_string[e+1:]
def solution(my_string, s, e):
    answer=my_string[:s]
    for i in range(e,s-1,-1):
        answer+=my_string[i]
    answer+=my_string[e+1:]
    return answer

 

 

 

 

 

 

 

 

158. 글자 지우기 

  • 문자열 my_string과 정수 배열 indices가 주어질 때, my_string에서 indices의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
  • 제한사항 :
    • 1 ≤ indices의 길이 < my_string의 길이 ≤ 100
    • my_string은 영소문자로만 이루어져 있습니다
    • 0 ≤ indices의 원소 < my_string의 길이
    • indices의 원소는 모두 서로 다릅니다.
  • 내가 푼 풀이
def solution(M, indices):
    return ''.join([M[i] for i in range(len(M)) if i not in indices])

print(solution("apporoograpemmemprs",   [1, 16, 6, 15, 0, 10, 11, 3]))
# 출력: Programmers

 

  •  다른 사람의 풀이
def solution(my_string, indices):
    answer = ''
    for i in range(len(my_string)):
        if i not in indices:answer+=my_string[i]
    return answer
def solution(my_string, indices):
    for idx in indices:
        my_string = my_string[:idx] + 'X' + my_string[idx+1:]
    return my_string.replace('X', '')

 

 

 

 

 

 

 

159. 빈 배열에 추가, 삭제하기 

  • 아무 원소도 들어있지 않은 빈 배열 X가 있습니다. 길이가 같은 정수 배열 arr과 boolean 배열 flag가 매개변수로 주어질 때, flag를 차례대로 순회하며 flag[i]가 true라면 X의 뒤에 arr[i] arr[i] × 2 번 추가하고, flag[i]가 false라면 X에서 마지막 arr[i]개의 원소를 제거한 뒤 X를 return 하는 solution 함수를 작성해 주세요.
  • 제한사항 :
    • 1 ≤ arr의 길이 = flag의 길이 ≤ 100
    • arr의 모든 원소는 1 이상 9 이하의 정수입니다.
    • 현재 X의 길이보다 더 많은 원소를 빼는 입력은 주어지지 않습니다.
  • 내가 푼 풀이

 

def solution(arr, flag):
    X = []
    for i in range(len(arr)):
        if flag[i]:
            X.extend([arr[i]] * (arr[i] * 2))
        else:
            X = X[:-arr[i]]
    return X

print(solution([3, 2, 4, 1, 3],[True, False, True, False, False]))
# 출력: [3, 3, 3, 3, 4, 4, 4, 4]

 

  •  다른 사람의 풀이
def solution(arr, flag):
    X = []
    for i, f in enumerate(flag):
        if f:
            X += [arr[i]] * (arr[i]*2)
        else:
            for _ in range(arr[i]):
                X.pop()
    return X
def solution(arr, flag):
    arr1 = []
    for i, j in zip(arr, flag):
        if j:
            arr1 += [i] * i * 2
        else:
            arr1 = arr1[:-i]
    return arr1

 

 

 

 

 

 

 

 

 

160. 음양 더하기 

  • 어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
  • 제한사항 :
    • absolutes의 길이는 1 이상 1,000 이하입니다.
      • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
    • signs의 길이는 absolutes의 길이와 같습니다.
      • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.
  • 내가 푼 풀이
def solution(absolutes, signs):
    total = 0
    for absolute, i in zip(absolutes, signs):
        if i:
            total += absolute
        else:
            total -= absolute
    return total

print(solution([4,7,12],[True,False,True]))
# 출력: 9

 

  •  다른 사람의 풀이
def solution(absolutes, signs):
    return sum(absolutes if sign else -absolutes for absolutes, sign in zip(absolutes, signs))

 

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