최고 답안
def get_distance(keypad, finger_position,next_number):
next_number_position = keypad[next_number]
distance = abs(finger_position[0] - next_number_position[0]) + abs(finger_position[1] - next_number_position[1])
return distance
def solution(numbers, hand):
result = ''
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], 0: [3, 1] }
left_finger_numbers = [1, 4, 7]
right_finger_numbers = [3, 6, 9]
center_finger_numbers = [2, 5, 8, 0]
left_finger_position = [3, 0]
right_finger_position = [3, 2]
for number in numbers:
if number in left_finger_numbers:
result += 'L'
left_finger_position = keypad[number]
elif number in right_finger_numbers:
result += 'R'
right_finger_position = keypad[number]
else:
left_finger_distance = get_distance(keypad, left_finger_position,number)
right_finger_distance = get_distance(keypad, right_finger_position, number)
if left_finger_distance > right_finger_distance:
result+='R'
right_finger_position = keypad[number]
elif left_finger_distance < right_finger_distance:
result+='L'
left_finger_position = keypad[number]
elif left_finger_distance == right_finger_distance:
result += hand[0].upper()
if hand == 'right':
right_finger_position = keypad[number]
elif hand == 'left':
left_finger_position = keypad[number]
return result
느낀점: 문제를 이해하고 적용하려하니 적용하기 어려운 부분이 많았다.
충족시켜야할 조건이 많아 굉장히 머리가 아팠다. 알고리즘을 짤때 각 번호들끼리의 거리는 어떻게 계산해야할지 막막했다. 머리를 싸매고 싸매다가 문제풀이를 보기로 결정했다. 문제풀이를 보니 keypad라는 딕셔너리를 통해 각 숫자의 위치정보를 저장하고, 이를 통해 현재 손가락 위치와 숫자사이의 거리를 구하는 함수를 만들수 있었다. 이 거리를 구하는 함수를 가지고 가장가까운 손의 위치를 구할 수 있었다. 이번 문제 풀이를 통해 현재의 정보를 가지고 최단거리를 구하는 문제의 접근 방법을 배울수 있었다.