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"))
'Koala - 4기' 카테고리의 다른 글
[프로그래머스] 합승 택시 요금 (0) | 2021.08.14 |
---|---|
[프로그래머스] 합승 택시 요금 (1) | 2021.08.12 |
[프로그래머스] 키패드 누르기 (0) | 2021.08.12 |
[프로그래머스] 키패드 누르기 문제 (5) | 2021.08.12 |
[프로그래머스] 자물쇠와 열쇠 (0) | 2021.08.11 |