키패드 누르기

kukudas·2022년 5월 13일
0

Algorithm

목록 보기
40/46

일반 배열로 하려했는데 그렇게 하면 인덱스 처리가 너무 복잡해서 딕셔너리로 하니 편해졌음.

def solution(numbers, hand):
    answer = ''
    
    LEFT = {1: [0, 0], 4:[1, 0], 7:[2, 0], '*':[3, 0]}
    MIDDLE = {2:[0, 1], 5:[1, 1], 8:[2, 1], 0:[3, 1]}
    RIGHT = {3:[0, 2], 6:[1, 2], 9:[2, 2], '#':[3, 2]}
    
    left_thumb = [3, 0]
    right_thumb = [3, 2]
    
    print(type(numbers[0]))
    for n in numbers:
        # 왼쪽꺼면
        if n in LEFT:
            answer += 'L'
            left_thumb = LEFT[n]
        # 오른쪽꺼면
        elif n in RIGHT:
            answer += 'R'
            right_thumb = RIGHT[n]
        # 중간 줄이면
        else:
            x = MIDDLE[n][0]
            y = MIDDLE[n][1]

            # 왼손 엄지가 더 가까우면
            if abs(x - left_thumb[0]) + abs(y - left_thumb[1]) < \
               abs(x - right_thumb[0]) + abs(y - right_thumb[1]):
                left_thumb = [x, y]
                answer += 'L'
            # 오른손 엄지가 더 가까우면
            elif abs(x - left_thumb[0]) + abs(y - left_thumb[1]) > \
                 abs(x - right_thumb[0]) + abs(y - right_thumb[1]):
                right_thumb = [x, y]
                answer += 'R'
            # 둘이 같으면
            else:
                # 왼손잡이
                if hand == 'left':
                    left_thumb = [x, y]
                    answer += 'L'
                # 오른손잡이
                else:
                    right_thumb = [x, y]
                    answer += 'R'
                    
    return answer

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

0개의 댓글