코드
def solution(numbers, hand):
results = []
left = 10
right = 12
for number in numbers :
if number in [1, 4, 7] :
results.append('L')
left = number
elif number in [3, 6, 9] :
results.append('R')
right = number
else : # 2, 5, 8, 0의 경우 거리 계산
if number == 0: number = 11
q_l, r_l = divmod(left-1, 3) # 왼손 숫자의 좌표
q_r, r_r = divmod(right-1, 3) # 오른손 숫자의 좌표
q_n, r_n = divmod(number-1, 3) # 현재 숫자의 좌표
if abs(q_n - q_r) + abs(r_n - r_r) > abs(q_n - q_l) + abs(r_n - r_l):
results.append('L')
left = number
elif abs(q_n - q_r) + abs(r_n - r_r) < abs(q_n - q_l) + abs(r_n - r_l) :
results.append('R')
right = number
else : # 거리가 같은 경우
if hand == 'right' :
results.append('R')
right = number
else :
results.append('L')
left = number
return ''.join(results)
코드 핵심
Mod 연산을 통해 각 숫자별 2차원 좌표를 구할 수 있음.
좌표를 통해 어느손이 가까운지 계산 가능.
- 대신
* = 10
,0 = 11
,# = 12
로 치환
number = 3*Quotient + Remainder + 1 ex) 7 = 3 * 2 + 0 + 1 => 좌표 (2, 0)
키패드 number의 좌표는 [Quotient, Remainder]