스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다.
이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다.
맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다.
numbers | hand | result |
---|---|---|
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] | "right" | "LRLLLRLLRRL" |
[7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] | "left" | "LRLLRRLLLRR" |
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0] | "right" | "LLRLLRLLRL" |
def solution(numbers, hand):
answer = ''
# 1 2 3
# 4 5 6
# 7 8 9
# 10 11 12
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),
10:(3,0),0:(3,1),12:(3,2)
}
beforeL,beforeR=10,12
for n in numbers:
if n in (1,4,7):
answer+='L'
beforeL=n
elif n in (3,6,9):
answer+='R'
beforeR=n
elif n in (2,5,8,0):
left=abs(keypad[n][0]-keypad[beforeL][0])+abs(keypad[n][1]-keypad[beforeL][1])
right=abs(keypad[n][0]-keypad[beforeR][0])+abs(keypad[n][1]-keypad[beforeR][1])
if left<right:
answer+="L"
beforeL=n
elif right<left:
answer+='R'
beforeR=n
else:
if hand=="right":
answer+="R"
beforeR=n
else:
answer+='L'
beforeL=n
return answer
문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/67256