티스토리 뷰
728x90
[ 코딩 테스트 연습 ]
151. 문자열 섞기
- 길이가 같은 두 문자열 str1과 str2가 주어집니다.
- 두 문자열의 각 문자가 앞에서부터 서로 번갈아가면서 한 번씩 등장하는 문자열을 만들어 return 하는 solution 함수를 완성해 주세요.
- 제한사항 :
- 1 ≤ str1의 길이 = str2의 길이 ≤ 10
- str1과 str2는 알파벳 소문자로 이루어진 문자열입니다.
- 1 ≤ str1의 길이 = str2의 길이 ≤ 10
- 내가 푼 풀이
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
-
- set(string):
- 주어진 문자열 string을 set으로 변환합니다. set은 중복된 값을 허용하지 않으므로, 중복된 문자가 제거됩니다.
- sorted(..., key=string.index):
- set으로 변환된 문자열을 정렬합니다. 여기서 key=string.index는 정렬 기준을 문자열의 원래 순서로 지정합니다. 따라서 중복을 제거한 문자열의 각 문자는 원래 문자열에서의 순서를 유지하게 됩니다.
- set(string):
- 다른 사람의 풀이
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에 따라 가능한 날짜로 주어집니다.
- date1의 길이 = date2의 길이 = 3
- 내가 푼 풀이
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의 길이
- 1 ≤ arr의 길이 ≤ 1,000
- 내가 푼 풀이
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] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.
- absolutes의 길이는 1 이상 1,000 이하입니다.
- 내가 푼 풀이
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))
반응형
'AI웹 개발자 과정 공부 (팀스파르타) > 코딩테스트 연습' 카테고리의 다른 글
24.04.16_TIL (알고리즘 예제 161-165) (0) | 2024.04.16 |
---|---|
24.04.08_TIL (알고리즘 예제 141-150) (1) | 2024.04.08 |
24.03.29_TIL (알고리즘 예제 131-140) (1) | 2024.03.29 |
24.03.27_TIL (알고리즘 예제 121-130) (0) | 2024.03.27 |
24.03.26_TIL (알고리즘 예제 111-120) (0) | 2024.03.26 |