개발/PS

프로그래머스 Lv1 키패드 누르기

유훈 | Yuhun 2021. 12. 30. 16:48
반응형

풀이

def solution(numbers, hand):
    answer = ''
    current_left = [4, 1]
    current_right = [4, 3]

    location = {1: [1, 1], 2: [1, 2], 3: [1, 3], 4: [2, 1], 5: [2, 2],
                6: [2, 3], 7: [3, 1], 8: [3, 2], 9: [3, 3], 0: [4, 2]}

    for num in numbers:
        if num == 1 or num == 4 or num == 7:
            answer += 'L'
            current_left = location[num]
        elif num == 3 or num == 6 or num == 9:
            answer += 'R'
            current_right = location[num]
        else:
            left_way = abs(current_left[0] - location[num][0]) + abs(current_left[1] - location[num][1])
            right_way = abs(current_right[0] - location[num][0]) + abs(current_right[1] - location[num][1])
            if left_way == right_way:
                if hand == 'left':
                    answer += 'L'
                    current_left = location[num]
                elif hand == 'right':
                    answer += 'R'
                    current_right = location[num]
            elif left_way < right_way:
                answer += 'L'
                current_left = location[num]
            elif left_way > right_way:
                answer += 'R'
                current_right = location[num]
    return answer

저는 키 패드를 행과 열로 구분해서 location이라는 Dictionary를 만들어 풀었어요.

먼저 현재 왼손과 오른손의 위치를 나누고 1,4,7은 왼손 3,6,9는 오른손이 가도록 했어요.

이제 2,5,8,0 부분을 잘 처리해 주어야 하는데.

left_way와 right_way는 현재 손가락의 위치에서 가로와 세로로 얼마나 가야 하는지를 계산해 준 값이에요.

1.만약 left_way와 right_way가 같다면

=> hand를 비교해서 이동할 손가락 결정

2. 둘 중 하나가 더 작으면

=> 작은쪽 손가락이 이동

이렇게 해주었어요.

 

좌표를 설정한다는 생각을 떠올리면 할만한 문제인데 처음에 생각이 안나서 생각하는데 시간이 조금 들었던 문제네요.

반응형