스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다.
이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다.
맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다.
다른건 다 제쳐두고 이 문제에서의 중요한 관건은
가운데 열 키까지의 거리를 어떻게 잴 것인가.
대각선 이동이 안 되므로 별 어렵게 생각할 것 없이 그냥 가로 + 세로 차이만큼 더하는게 거리다.
이것만 알아내고 나면 나머지는 그저 조건문의 반복이었다.
좌표 인덱싱이 무지막지할거 같아서 고민하다가, 수가 얼마 안 되므로 그냥 딕셔너리 형태로 좌표값을 고정해두었다.
def solution(numbers, hand):
pad = {
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)
}
result = ""
left, right = pad['*'], pad['#']
for num in numbers:
loc = pad[num]
if loc[1] == 0:
result += "L"
left = pad[num]
elif loc[1] == 2:
result += "R"
right = pad[num]
else:
ldist = abs(left[0]-loc[0])+abs(left[1]-loc[1])
rdist = abs(right[0]-loc[0])+abs(right[1]-loc[1])
if ldist < rdist:
result += "L"
left = pad[num]
elif ldist > rdist:
result += "R"
right = pad[num]
else:
if hand == "left":
result += "L"
left = pad[num]
else:
result += "R"
right = pad[num]
return result