알고리즘

programmers 키패드 누르기(Python)

jenyy 2021. 6. 6. 18:21

https://programmers.co.kr/learn/courses/30/lessons/67256

 

코딩테스트 연습 - 키패드 누르기

[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"

programmers.co.kr

 

def solution(numbers, hand):
    answer = []
    left,right = [1,4,7], [3,6,9]
    # 거리 계산을 위해 2차원 좌표로 변환
    change_2d = {'*':(1,1),0:(1,2),'#':(1,3),
                7:(2,1),8:(2,2),9:(2,3),
                4:(3,1),5:(3,2),6:(3,3),
                1:(4,1),2:(4,2),3:(4,3)}
    # 현재 오른손, 왼손이 어디 위치해 있는지를 확인
    h_left, h_right = '*','#'
    for num in numbers:
        if num in right:
            answer.append('R')
            h_right = num
        elif num in left:
            answer.append('L')
            h_left = num
        else:
            r = abs(change_2d[h_right][0]-change_2d[num][0]) + abs(change_2d[h_right][1]-change_2d[num][1])
            l = abs(change_2d[h_left][0]-change_2d[num][0]) + abs(change_2d[h_left][1]-change_2d[num][1])
            if r > l:
                answer.append('L')
                h_left = num
            elif r == l:
                if hand == 'right':
                    answer.append('R')
                    h_right = num
                else:
                    answer.append('L')
                    h_left = num
            else:
                answer.append('R')
                h_right = num
    return ''.join(answer)