728x90
반응형
코딩 테스트 Coding Test 와 코드 리뷰 Code Review
코딩 테스트 문제풀이의 목표
- 코딩 테스트 문제풀이를 하며 알고리즘에 대한 이해도를 높힌다
- 팀원들과 코드 리뷰를 하며 해당 코드를 짠 구체적인 이유를 제시한다
- https://github.com/raoneli1013/codingtest
문제 1 : https://school.programmers.co.kr/learn/courses/30/lessons/120895
# 인덱스 바꾸기
# 문제 설명
# 문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때,
# my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을
# return 하도록 solution 함수를 완성해보세요.
# 제한사항
# 1 < my_string의 길이 < 100
# 0 ≤ num1, num2 < my_string의 길이
# my_string은 소문자로 이루어져 있습니다.
# num1 ≠ num2
my_string = "I love you"
num1 = 3
num2 = 6
# for문사용
answer = ''
for idx in range(len(my_string)):
if idx==num1: idx = num2
elif idx==num2: idx = num1
answer += my_string[idx]
print(answer)
# 제출용 함수
def solution(my_string, num1, num2):
answer = ''
for idx in range(len(my_string)):
if idx==num1: idx = num2
elif idx==num2: idx = num1
answer += my_string[idx]
return answer
문제 2 : https://school.programmers.co.kr/learn/courses/30/lessons/120861
# 캐릭터의 좌표
# 문제 설명
# 머쓱이는 RPG게임을 하고 있습니다.
# 게임에는 up, down, left, right 방향키가 있으며 각 키를 누르면
# 위, 아래, 왼쪽, 오른쪽으로 한 칸씩 이동합니다.
# 예를 들어 [0,0]에서 up을 누른다면 캐릭터의 좌표는 [0, 1],
# down을 누른다면 [0, -1], left를 누른다면 [-1, 0],
# right를 누른다면 [1, 0]입니다.
# 머쓱이가 입력한 방향키의 배열 keyinput와 맵의 크기 board이 매개변수로 주어집니다.
# 캐릭터는 항상 [0,0]에서 시작할 때 키 입력이 모두 끝난 뒤에
# 캐릭터의 좌표 [x, y]를 return하도록 solution 함수를 완성해주세요.
# [0, 0]은 board의 정 중앙에 위치합니다.
# 예를 들어 board의 가로 크기가 9라면 캐릭터는 왼쪽으로 최대 [-4, 0]까지
# 오른쪽으로 최대 [4, 0]까지 이동할 수 있습니다.
# 제한사항
# board은 [가로 크기, 세로 크기] 형태로 주어집니다.
# board의 가로 크기와 세로 크기는 홀수입니다.
# board의 크기를 벗어난 방향키 입력은 무시합니다.
# 0 ≤ keyinput의 길이 ≤ 50
# 1 ≤ board[0] ≤ 99
# 1 ≤ board[1] ≤ 99
# keyinput은 항상 up, down, left, right만 주어집니다.
keyinput = ["left", "right", "up", "right", "right"]
board = [11, 11]
board_width = board[0]//2
board_hight = board[1]//2
# 입력 - 동작값 딕셔너리
keyinput_dic = {"up":[0,1], "down":[0,-1], "left":[-1,0], "right":[1,0]}
answer = [0,0]
for i in keyinput:
# board가 넘어가지 않도록 조건 설정
if board_width >= answer[0]+keyinput_dic[i][0] >= -board_width :
answer[0] += keyinput_dic[i][0]
if board_hight >= answer[1]+keyinput_dic[i][1] >= -board_hight :
answer[1] += keyinput_dic[i][1]
print(answer)
# 제출용 함수
def solution(keyinput, board):
board_width = board[0]//2
board_hight = board[1]//2
keyinput_dic = {"up":[0,1], "down":[0,-1], "left":[-1,0], "right":[1,0]}
answer = [0,0]
for i in keyinput:
if board_width >= answer[0]+keyinput_dic[i][0] >= -board_width :
answer[0] += keyinput_dic[i][0]
if board_hight >= answer[1]+keyinput_dic[i][1] >= -board_hight :
answer[1] += keyinput_dic[i][1]
return answer
문제 3 : https://school.programmers.co.kr/learn/courses/30/lessons/181921
# 배열 만들기 2
# 문제 설명
# 정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만
# 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는
# solution 함수를 완성해 주세요.
# 만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.
l = 10
r = 20
answer = []
for i in range(l,r+1):
if str(i).replace('5','').replace('0','')=='': answer.append(i)
if answer == []: answer.append(-1)
print(answer)
문제 4 : https://school.programmers.co.kr/learn/courses/30/lessons/131128
# https://school.programmers.co.kr/learn/courses/30/lessons/131128
# 숫자 짝꿍
# 문제 설명
# 두 정수 X, Y의 임의의 자리에서 공통으로 나타나는 정수 k(0 ≤ k ≤ 9)들을 이용하여
# 만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라 합니다
# (단, 공통으로 나타나는 정수 중 서로 짝지을 수 있는 숫자만 사용합니다)
# X, Y의 짝꿍이 존재하지 않으면, 짝꿍은 -1입니다.
# X, Y의 짝꿍이 0으로만 구성되어 있다면, 짝꿍은 0입니다.
# 예를 들어, X = 3403이고 Y = 13203이라면, X와 Y의 짝꿍은 X와 Y에서
# 공통으로 나타나는 3, 0, 3으로 만들 수 있는 가장 큰 정수인 330입니다.
# 다른 예시로 X = 5525이고 Y = 1255이면 X와 Y의 짝꿍은 X와 Y에서
# 공통으로 나타나는 2, 5, 5로 만들 수 있는 가장 큰 정수인 552입니다
# (X에는 5가 3개, Y에는 5가 2개 나타나므로 남는 5 한 개는 짝 지을 수 없습니다.)
# 두 정수 X, Y가 주어졌을 때, X, Y의 짝꿍을 return하는
# solution 함수를 완성해주세요.
# 제한사항
# 3 ≤ X, Y의 길이(자릿수) ≤ 3,000,000입니다.
# X, Y는 0으로 시작하지 않습니다.
# X, Y의 짝꿍은 상당히 큰 정수일 수 있으므로, 문자열로 반환합니다.
X = "100"
Y = "203045"
answer = ''
arr_x = [0]*10
arr_y = [0]*10
for i in X:
arr_x[int(i)]+=1
for i in Y:
arr_y[int(i)]+=1
for i in range(0,10):
answer = str(i)*(min(arr_x[i],arr_y[i])) + answer
if answer == '': answer = '-1'
elif answer.replace('0','') == '': answer = '0'
print(answer)
# 제출용 함수
def solution(X, Y):
answer = ''
arr_x = [0]*10
arr_y = [0]*10
for i in X:
arr_x[int(i)]+=1
for i in Y:
arr_y[int(i)]+=1
for i in range(0,10):
answer = str(i)*(min(arr_x[i],arr_y[i])) + answer
if answer == '': answer = '-1'
elif answer.replace('0','') == '': answer = '0'
return answer
문제자체는 어렵지 않았지만 계속 시간초과에 걸렸던 문제.
for문을 어떻게 하면 최대한 줄일 수 있을까 고민을 많이 했다.
count나 index, list 등 여러가지 메소드를 쓰는것도 겉으로 보이진 않지만 시간복잡도가 있기 때문에
코테할때는 그런부분도 신경써야겠다.
728x90
반응형