728x90
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/67256
난이도 : Lv.1
풀이
def solution(numbers, hand):
answer = ''
# L: 왼손, R: 오른손
L = '*'
R = '#'
# 키패드
keypad = {0:(3,1),
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),
'#':(3,2)}
for num in numbers:
if num in [1, 4, 7]:
answer += 'L'
L = num
elif num in [3, 6, 9]:
answer += 'R'
R = num
# 왼손, 오른손 다 누를 수 있는 숫자일 경우
else :
Llen = abs(keypad[num][0] - keypad[L][0]) + abs(keypad[num][1] - keypad[L][1])
Rlen = abs(keypad[num][0] - keypad[R][0]) + abs(keypad[num][1] - keypad[R][1])
# 거리가 짧은 쪽
if Llen < Rlen:
answer += 'L'
L = num
elif Llen > Rlen:
answer += 'R'
R = num
# 거리가 동일한 경우
else:
if hand == 'left':
answer += 'L'
L = num
else :
answer += 'R'
R = num
return answer
처음엔 가운데 라인은 인접한 손가락으로 누르라는 말을 보고 DFS인가 했다가, 레벨1 이라는 걸 상기하고 단순하게 거리 계산만 하기로 했다.
처음 모든 키패드의 위치 정보를 초기 세팅하고 주어진 숫자를 지나갈 때마다 왼손, 오른손 정보에 그 숫자를 저장한다.
[1,4,7], [3,6,9]는 문제에 나와있는 조건으로 움직여주고 가운데 라인은 현재 위치에서 거리 계산해서 가까운 쪽 손을 움직인다.
728x90