Koala - 4기

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

Chamming2 2021. 8. 12. 16:55

1. 키패드의 번호와 해당 번호의 위치를 맵에 저장합니다. (Ex. '1' : (0, 0) = 키패드 "1" 은 (0,0) 좌표상에 있음.)
2. 맵에 저장된 키패드의 위치를 기반으로 거리를 구할 수 있으므로, 주어진 조건대로 충실히 구현하면 됩니다!

+ 엄청 쉬운 문제래서 처음에는 별 생각없이 '3과 5의 거리는 2고, 4와 5의 거리는 1이라... 이거 두 수의 절대값이 거리가 되는건가!?' 하고 무지성으로 풀다가 다칠 뻔했네요 ^__^;

파이썬 코드입니다.

keypad = {}


def check(numbers, hand):
    result = ""
    prevRight = '#'
    prevLeft = '*'
    for number in numbers:
        # print(prevLeft, prevRight, number, result)
        if number == 1 or number == 4 or number == 7:
            prevLeft = number
            result += "L"
        elif number == 3 or number == 6 or number == 9:
            prevRight = number
            result += 'R'
        else:
            if (abs(keypad[prevRight][0] - keypad[number][0]) + abs(keypad[prevRight][1] - keypad[number][1])) > (abs(keypad[prevLeft][0] - keypad[number][0]) + abs(keypad[prevLeft][1] - keypad[number][1])):
                prevLeft = number
                result += 'L'
            elif (abs(keypad[prevRight][0] - keypad[number][0]) + abs(keypad[prevRight][1] - keypad[number][1])) < (abs(keypad[prevLeft][0] - keypad[number][0]) + abs(keypad[prevLeft][1] - keypad[number][1])):
                prevRight = number
                result += 'R'
            else:
                if hand == "left":
                    prevLeft = number
                    result += 'L'
                else:
                    prevRight = number
                    result += 'R'

    return result


def solution(numbers, hand):
    for row in range(3):
        for col in range(3):
            keypad[row * 3 + (col + 1)] = (row, col)
    keypad['*'] = (3, 0)
    keypad[0] = (3, 1)
    keypad['#'] = (3, 2)
    # print(keypad)
    answer = check(numbers, hand)
    return answer


# print(solution([1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5], "right"))