[문제 링크]
https://programmers.co.kr/learn/courses/30/lessons/67256
[소스코드]
def solution(numbers, hand):
answer = ''
key_dict = {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]
lhand = '*'
rhand = '#'
for i in numbers:
if i in left:
answer += 'L'
lhand = i
elif i in right:
answer += 'R'
rhand = i
else:
curPos = key_dict[i]
lPos = key_dict[lhand]
rPos = key_dict[rhand]
ldist = abs(curPos[0]-lPos[0]) + abs(curPos[1]-lPos[1])
rdist = abs(curPos[0]-rPos[0]) + abs(curPos[1]-rPos[1])
if ldist < rdist:
answer += 'L'
lhand = i
elif ldist > rdist:
answer += 'R'
rhand = i
else:
if hand == 'left':
answer += 'L'
lhand = i
else:
answer += 'R'
rhand = i
return answer
[풀이]
- 각 버튼을 튜플로 좌표화 시켜서 사전에 저장한다.
numbers
를 순회하면서 왼손과 오른손의 좌표를 계속 업데이트한다.- 1,4,7인 경우 L, 3,6,9인 경우 R을 할당하고
- 아닌 경우 현재 위치, 현재왼손위치, 현재 오른손위치를 딕셔너리에서 찾아서 거리를 계산한다.