본문 바로가기
코딩테스트 연습

[카카오 인턴]키패드_누르기_파이썬

by 부자독개 2020. 12. 18.
반응형
def solution(numbers, hand):
    pad_id = {1:[0,0],2:[0,1],3:[0,2],
              4:[1,0],5:[1,1],6:[1,2],
              7:[2,0],8:[2,1],9:[2,2], 
                      0:[3,1]}
    L_location = [3,0]
    R_location = [3,2]
    
    result = []
    
    while(numbers != []):
        if numbers[0] == 1 or numbers[0] == 4 or numbers[0] == 7:
            result.append('L')
            L_location = pad_id[numbers[0]]
            del numbers[0]
        elif numbers[0] == 3 or numbers[0] == 6 or numbers[0] == 9:
            result.append('R')
            R_location = pad_id[numbers[0]]
            del numbers[0]
        else: # 숫자가 2,5,8,0 일때

            # 왼손 오른손의 위치와 눌러야할 패드의 위치 사이의 L1_distance를 구한다.
            L_distance = abs(L_location[0]-pad_id[numbers[0]][0]) + abs(L_location[1]-pad_id[numbers[0]][1])
            R_distance = abs(R_location[0]-pad_id[numbers[0]][0]) + abs(R_location[1]-pad_id[numbers[0]][1])
            
            if L_distance > R_distance:
                result.append('R')
                R_location = pad_id[numbers[0]]
                del numbers[0]
            elif L_distance < R_distance:
                result.append('L')
                L_location = pad_id[numbers[0]]
                del numbers[0] 
            else:
                if hand == "right":
                    result.append('R')
                    R_location = pad_id[numbers[0]]
                    del numbers[0]
                else:
                    result.append('L')
                    L_location = pad_id[numbers[0]]
                    del numbers[0] 
        # print(result,numbers)
    answer = ''
    for i in range(len(result)):
        answer += result[i]                    
                
    return answer

키패드를 좌표로 설정하기위해 딕셔너리를 사용하였다.

2,5,8,0 만 잘 처리하면 쉬운 문제라 생각하였으나 채점에서 문제가 있었다.

 

if numbers[0] == (1 or 4 or 7) 이 동작하는줄 알았지만 그렇지 않았고 

if numbers[0] == 1 or numbers[0] == 4 or numbers[0] == 7로 수정하여 문제를 해결했다.

반응형

댓글