- 엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다. - 만약 두 엄지손가락의 거리가 같다면, 오른손잡이는 오른손 엄지손가락, 왼손잡이는 왼손 엄지손가락을 사용합니다. - hand는 "left" 또는 "right" 입니다."left"는 왼손잡이, "right"는 오른손잡이를 의미합니다. - 왼손 엄지손가락을 사용한 경우는 L, 오른손 엄지손가락을 사용한 경우는 R을 순서대로 이어붙여 문자열 형태로 return 해주세요.
1. 풀이
처음에 keypad를 2차원리스트로 정렬했는데 이렇게 하니까 거리 계산이 어려워서 다른 분들의 풀이를 참고해 좌표로 구성된 딕셔너리를 생성했습니다.
def solution(numbers, hand):
answer = ''
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)
}
left = keypad['*'] #처음 왼손의 위치
right = keypad['#'] #처음 오른손의 위치
for i in numbers:
if i==1 or i==4 or i==7:
answer += "L"
left = keypad[i] #해당 번호 눌렀을 때 왼손 위치 저장
elif i==3 or i==6 or i==9:
answer += "R"
right = keypad[i] #해당 번호 눌렀을 때 오른손 위치 저장
else:
#번호와 왼손의 거리 계산
left_distance = abs(keypad[i][0] - left[0]) + abs(keypad[i][1] - left[1])
#번호와 오른손의 거리 계산
right_distance = abs(keypad[i][0] - right[0]) + abs(keypad[i][1] - right[1])
if left_distance < right_distance:
answer += "L"
left = keypad[i] # 왼손으로 눌렀을 때 왼손 위치 저장
elif left_distance > right_distance:
answer += "R"
right = keypad[i] # 오른손으로 눌렀을 때 오른손 위치 저장
else:
# 거리가 같다면 사용자의 주 손잡이에 따라 결정
if hand == "left":
answer += "L"
left = keypad[i]
else:
answer += "R"
right = keypad[i]
return answer
딕셔너리와 튜플이 합쳐진 형태이므로
거리 계산의 형태를 헷갈리지 말아야 합니다.
dic = {"health" : (3,2,1), "running" : (4,5,6,8)} 일 경우 2에 접근하기 위해서는 dic["health"][1] 이 되어야 하고, 6에 접근하기 위해서는 dic["running"][2]이 되어야 합니다.