어렵지는 않았는데, 그냥 잡다한 생각을 해서 그런지 시간이 많이 걸렸다. (사실 생각을 못해서 시간을 많이 잡아먹었다.)
[1,4,7] / [3,6,9] 이 부분이야 처리하는게 어렵지 않지만, [2,5,8,0] 이 부분은 현재 왼손 / 오른손 과의 거리를 어떻게 재야 할지 고민했다.
이런 생각 하다가 그냥 딕셔너리에다가 각 번호의 좌표를 넣고 [2,5,8,0] 을 누를 때, 두 손과 누른 버튼의 거리를 구했습니다.
def solution(numbers, hand):
key = { 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 = [1,4,7]
right = [3,6,9]
last_left = ["*"]
last_right = ["#"]
answer = ''
for num in numbers :
if num in left :
answer += "L"
last_left.append(num)
elif num in right :
answer += "R"
last_right.append(num)
else :
left_dist = abs( key[last_left[-1]][0]- key[num][0]) + abs(key[last_left[-1]][1]-key[num][1])
right_dist = abs(key[last_right[-1]][0]-key[num][0]) + abs(key[last_right[-1]][1]-key[num][1])
if left_dist == right_dist :
if hand == "right" :
answer += "R"
last_right.append(num)
else :
answer += "L"
last_left.append(num)
elif left_dist < right_dist :
answer += "L"
last_left.append(num)
elif left_dist > right_dist :
answer += "R"
last_right.append(num)
return answer
C++ 은 추가 예정
include <iostream>