def distance(n, l, r, hand):
    n, l, r= [n, 1], l[0], r[0]
    ld = abs(n[0]-l[0]) + abs(n[1]-l[1])
    rd = abs(n[0]-r[0]) + abs(n[1]-r[1])
    
    if ld==rd:
        if hand=='left': return 'L'
        else: return 'R'
        
    elif ld<rd: return 'L'
    else: return 'R'
    
def solution(numbers, hand):
    answer = ''
    keypad = [[1, 2, 3], [4, 5, 6], [7, 8, 9], ['*', 0, '#']]
    l_stack = ['*']
    r_stack = ['#']
    
    for n in numbers:
        if n in [i[0] for i in keypad]:
            l_stack.append(n)
            answer += 'L'
        elif n in [i[2] for i in keypad]:
            r_stack.append(n)
            answer += 'R'
        else:
            m = [i[1] for i in keypad].index(n)
            l = [[i, j] for i in range(4) for j in range(3) if keypad[i][j]==l_stack[-1]]
            r = [[i, j] for i in range(4) for j in range(3) if keypad[i][j]==r_stack[-1]]
            answer += distance(m, l, r, hand)
            if answer[-1]=='L': l_stack.append(n)
            else: r_stack.append(n)
            
    return answer

2차원 배열로 키패드 생성
키패드의 왼쪽 열(인덱스가 0인 열)은 왼손('L'), 키패드의 오른쪽 열(인덱스가 2인 열)은 오른손('R')으로 출력하고 양쪽 손가락의 위치(숫자)를 저장하는 배열에 추가
가운데 열(인덱스가 1인 열)에 위치한 숫자를 누르게 되는 경우, 양쪽 손가락의 위치를 인덱스로 나타내고 거리를 계산하는 distance 함수를 호출
distance 함수에서는 행과 열 인덱스를 계산하여 거리가 가까운 손을 반환
거리가 같은 경우에는 주어진 hand 변수에 따라 반환
반환한 문자에 따라 양 손가락의 위치를 저장한 배열에 위치 추가

0개의 댓글