[프로그래머스] [카카오 인턴] 키패드 누르기Lv.1 - Python

GoshK·2022년 2월 1일
0

[프로그래머스] Python

목록 보기
47/68
post-thumbnail

[프로그래머스] [카카오 인턴] 키패드 누르기Lv.1

나의 풀이

def solution(numbers, hand):
    keypad = {
        1: [0, 0],
        2: [0, 1],
        3: [0, 2],
        4: [1, 0],
        5: [1, 1],
        6: [1, 2],
        7: [2, 0],
        8: [2, 1],
        9: [2, 2],
        '*': [3, 0],
        0: [3, 1],
        '#': [3, 2],
    }
    result = []
    left, right = keypad['*'], keypad['#']
    for num in numbers:
        if num == 3 or num == 6 or num == 9:
            right = keypad[num]
            result.append("R")
        elif num == 1 or num == 4 or num == 7:
            left = keypad[num]
            result.append("L")

        if num == 8 or num == 5 or num == 2 or num == 0:
            num_x, num_y = keypad[num][0], keypad[num][1]
            left_distance = (abs(num_x - left[0]) + abs(num_y - left[1]))
            right_distance = (abs(num_x - right[0]) + abs(num_y - right[1]))
            if right_distance > left_distance:
                left = keypad[num]
                result.append("L")
            elif right_distance < left_distance:
                right = keypad[num]
                result.append("R")
            else:
                if hand == "left":
                    left = keypad[num]
                    result.append("L")
                else:
                    right = keypad[num]
                    result.append("R")

    return "".join(result)
  • 입력되는 키패드의 번호에 맞는 좌표를 얻기위해 사전형을 사용했다.
  • 처음 left, right 의 위치는 *과 #에 위치하기 때문에, 해당 좌표를 각 변수에 저장한다.
  • 입력되는 숫자가 3, 6, 9이면 right 의 위치가 움직여야하기 때문에, right의 좌표를 숫자에 맞게 바꾸고, R을 결과에 추가한다.
  • 입력되는 숫자가 1, 4, 7이면 right와 마찬가지로, left 의 좌표를 바꾸고 L을 결과에 추가한다.
  • 만약 2, 5, 8, 0 과 같이 가운데에 있는 숫자라면, 현재 left, right 의 위치와의 거리를 계산하여 가까운 쪽을 움직인다.
  • 단, 거리의 차가 같을 경우, 입력된 손의 위치에 맞는 손의 방향을 옮겨주고 결과에 추가해주면 된다.
  • 마지막으로 결과는 문자열이어야 하기 때문에, join으로 리스트를 문자열로 바꿔준다.

0개의 댓글