본문 바로가기
Python/코테 연습

[2020 카카오 인턴십] 키패드 누르기

by soojitasan 2024. 8. 11. 16:21
## 🔒 문제. [카카오 인턴] 키패드 누르기
def solution(numbers, hand):
    answer = ''

    keypad = {1:(-1, 3), 2:(0, 3), 3:(1, 3)
                    , 4:(-1, 2), 5:(0, 2), 6:(1, 2)
                    , 7:(-1, 1), 8:(0, 1), 9:(1, 1)
                    , 0:(0, 0)}
    l_hand_pos = (-1, 0)
    r_hand_pos = (1, 0)
    fin_thm = str()

    for n in numbers:
        if n in [1, 4, 7]:
            l_hand_pos = keypad[n]
            fin_thm += 'L'
        elif n in [3, 6, 9]:
            r_hand_pos = keypad[n]
            fin_thm += 'R'
        elif n in [2, 5, 8, 0]:
            ## 오른손과 왼손 중 어느 손이 가까운지 비교
            #### 맨허튼 거리 계산 (격자)
            l_hand_distance = abs( l_hand_pos[0] - keypad[n][0] ) + abs( l_hand_pos[1] - keypad[n][1] )
            r_hand_distance = abs( r_hand_pos[0] - keypad[n][0] ) + abs( r_hand_pos[1] - keypad[n][1] )

            if l_hand_distance < r_hand_distance:
                l_hand_pos = keypad[n]
                fin_thm += 'L'
            elif l_hand_distance > r_hand_distance:
                r_hand_pos = keypad[n]
                fin_thm += 'R'
            else:
                if hand == 'left':
                    l_hand_pos = keypad[n]
                    fin_thm += 'L'
                else:
                    r_hand_pos = keypad[n]
                    fin_thm += 'R'

    answer = fin_thm
    return answer

## print(solution([1, 2, 2], "right"))
## print(solution([1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5], "right"))
## print(solution([7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2], "left"))
## print(solution([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], "right"))