코딩테스트
[파이썬] 키패드 누르기 - 2020 카카오 인턴십 [CODING TEST #9]
ALTERww
2022. 7. 20. 15:08
320x100
https://school.programmers.co.kr/learn/courses/30/lessons/67256
numbers 리스트를 돌면서 실시간으로 두 개의 엄지손가락 위치를 저장한다.
거리를 어떻게 비교해야하지? 고민을 좀 많이 했는데, 각 리스트의 [0]은 x, [1]은 y좌표를 의미하니
각 좌표 차이에 절댓값 abs()를 씌우고 더하면 거리가 된다! 이 값을 비교하여 더 짧은 쪽 손가락을 사용하게 했다.
def solution(numbers, hand):
answer = ''
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]}
left_loc, right_loc = keypad['*'], keypad['#']
for number in numbers:
if number in [1,4,7]:
answer += 'L'
left_loc = keypad[number]
elif number in [3,6,9]:
answer += 'R'
right_loc = keypad[number]
else:
if abs(keypad[number][0] - left_loc[0]) + abs(keypad[number][1] - left_loc[1]) > abs(keypad[number][0] - right_loc[0]) + abs(keypad[number][1] - right_loc[1]):
answer += 'R'
right_loc = keypad[number]
elif abs(keypad[number][0] - left_loc[0]) + abs(keypad[number][1] - left_loc[1]) < abs(keypad[number][0] - right_loc[0]) + abs(keypad[number][1] - right_loc[1]):
answer += 'L'
left_loc = keypad[number]
else:
if hand == 'left':
answer += 'L'
left_loc = keypad[number]
else:
answer += 'R'
right_loc = keypad[number]
return answer