문제
해결 과정
- 왼쪽 손가락, 오른쪽 손가락의 현재 위치 (
*
,#
) 선언
- 키패드를 딕셔너리로 선언
- 반복문을 통해 눌러야하는 번호를 하나씩 확인한다.
[1,4,7]
일 때, 문자열 'L'을 붙이고, 왼쫀 손가락 위치를 갱신
[3,6,9]
일 때, 문자열 'R'을 붙이고, 오른쪽 손가락 위치를 갱신
[2,5,8,0]
일 때
- 해당 번호와 왼쪽 손가락이 가까운지, 오른쪽 손가락이 가까운지 계산
- 거리가 가까운 손가락을 움직인다.
- 거리가 같다면 왼손잡이, 오른손잡이에 따라 달라진다.
시행착오
- "상하좌우"라는 말이 나오길래 DFS/BFS를 생각했다. 그런데 레벨1인데 더 쉬운 방법이 있을 것 같아서 고민 고민
- 키패드를 딕셔너리로 선언하는 게 관건!
- 점과 점사이의 거리를 사용
풀이
def solution(numbers, hand):
answer = ''
left_now = [3,0]
right_now = [3,2]
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]}
for i in numbers:
if i in [1,4,7]:
answer = answer + 'L'
left_now = keypad[i]
if i in [3,6,9]:
answer = answer + 'R'
right_now = keypad[i]
if i in [2,5,8,0]:
left = abs(keypad[i][0] - left_now[0]) + abs(keypad[i][1] - left_now[1])
right = abs(keypad[i][0] - right_now[0]) + abs(keypad[i][1] - right_now[1])
if left < right:
left_now = keypad[i]
answer = answer + 'L'
elif left > right:
right_now = keypad[i]
answer = answer + 'R'
elif left == right:
if hand == 'right':
right_now = keypad[i]
answer = answer + 'R'
else:
left_now = keypad[i]
answer = answer + 'L'
return answer