코딩한걸음
728x90
반응형

1. 코딩 테스트 Coding Test 와 코드 리뷰 Code Review


1.1. 코딩 테스트 문제풀이의 목표

  • 코딩 테스트 문제풀이를 하며 알고리즘에 대한 이해도를 높힌다
  • 팀원들과 코드 리뷰를 하며 해당 코드를 짠 구체적인 이유를 제시한다
  • https://github.com/raoneli1013/codingtest

1.2. 문제 1 : https://school.programmers.co.kr/learn/courses/30/lessons/120895

<python />
# 인덱스 바꾸기 # 문제 설명 # 문자열 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

 


1.3. 문제 2 : https://school.programmers.co.kr/learn/courses/30/lessons/120861

<python />
# 캐릭터의 좌표 # 문제 설명 # 머쓱이는 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

 


1.4. 문제 3 : https://school.programmers.co.kr/learn/courses/30/lessons/181921

<python />
# 배열 만들기 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)

 


1.5. 문제 4 : https://school.programmers.co.kr/learn/courses/30/lessons/131128

<python />
# 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
반응형
profile

코딩한걸음

@Joonyeol_Yoon

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!