문제 참고
코드 작성
def solution(numbers, hand):
answer = []
left_hand = ['*', 1, 4, 7]
right_hand = ['#', 3, 6, 9]
center = [2, 5, 8, 0]
left_pose = [3, 0, 99, 99, 1, 99, 99, 2, 99, 99]
right_pose = [3, 99, 99, 0, 99, 99, 1, 99, 99, 2]
center_pose = [3, 99, 0, 99, 99, 1, 99, 99, 2, 99]
left_dist = [[1, 2, 3, 4], [2, 1, 2, 3], [3, 2, 1, 2], [4, 3, 2, 1]]
right_dist = [[1, 2, 3, 4], [2, 1, 2, 3], [3, 2, 1, 2], [4, 3, 2, 1]]
center_dist = [[0, 1, 2, 3], [1, 0, 1, 2], [2, 1, 0, 1], [3, 2, 1, 0]]
left_posit = [3, 0]
right_posit = [3, 2]
for num in numbers:
if num in left_hand:
left_posit = [left_pose[num], 0]
answer.append('L')
elif num in right_hand:
right_posit = [right_pose[num], 2]
answer.append('R')
else:
if left_posit[1] == 1 and right_posit[1] != 1:
if center_dist[left_posit[0]][center_pose[num]] < right_dist[right_posit[0]][center_pose[num]]:
answer.append('L')
left_posit = [center_pose[num], 1]
elif center_dist[left_posit[0]][center_pose[num]] > right_dist[right_posit[0]][center_pose[num]]:
answer.append('R')
right_posit = [center_pose[num], 1]
else:
if hand == 'left':
answer.append('L')
left_posit = [center_pose[num], 1]
else:
answer.append('R')
right_posit = [center_pose[num], 1]
elif left_posit[1] != 1 and right_posit[1] == 1:
if center_dist[right_posit[0]][center_pose[num]] < left_dist[left_posit[0]][center_pose[num]]:
answer.append('R')
right_posit = [center_pose[num], 1]
elif center_dist[right_posit[0]][center_pose[num]] > left_dist[left_posit[0]][center_pose[num]]:
answer.append('L')
left_posit = [center_pose[num], 1]
else:
if hand == 'left':
answer.append('L')
left_posit = [center_pose[num], 1]
else:
answer.append('R')
right_posit = [center_pose[num], 1]
elif left_posit[1] == 1 and right_posit[1] == 1:
if center_dist[right_posit[0]][center_pose[num]] < center_dist[left_posit[0]][center_pose[num]]:
answer.append('R')
right_posit = [center_pose[num], 1]
elif center_dist[right_posit[0]][center_pose[num]] > center_dist[left_posit[0]][center_pose[num]]:
answer.append('L')
left_posit = [center_pose[num], 1]
else:
if hand == 'left':
answer.append('L')
left_posit = [center_pose[num], 1]
else:
answer.append('R')
right_posit = [center_pose[num], 1]
else:
if right_dist[right_posit[0]][center_pose[num]] < left_dist[left_posit[0]][center_pose[num]]:
answer.append('R')
right_posit = [center_pose[num], 1]
elif right_dist[right_posit[0]][center_pose[num]] > left_dist[left_posit[0]][center_pose[num]]:
answer.append('L')
left_posit = [center_pose[num], 1]
else:
if hand == 'left':
answer.append('L')
left_posit = [center_pose[num], 1]
else:
answer.append('R')
right_posit = [center_pose[num], 1]
result = ''.join(answer)
return result
어.. 딱히 어떻게 풀지 생각이 안나서 노가다했다.
- 왼손, 오른손, 가운데 버튼들을 구분
- 각 키패드 숫자 별로 포지션을 지정하여 배열 생성. 가장 맨 위가 0이고, 가장 아래가 3
- 맨 위에 있는 버튼들을 기준으로 +1씩 크기가 증가하도록 하는 배열을 만듦
- 왼손과 오른손의 초기 포지션 배열 생성
번호에 따라 왼손과 오른손의 포지션이 변경된다.
왼쪽에 있거나 오른쪽에 있는 버튼들은 거리에 상관없이 각각 왼손과 오른손으로 누른다.
다음에 눌러야 하는 번호가 가운데에 위치한 경우 왼손, 오른손과의 거리를 판단한다.
최종적으로 answer에 저장된 'L', 'R'를 합쳐서 result에 저장.