이 문제를 보고 처음에 왼손으로 누른 마지막 번호와 오른손으로 누른 마지막 번호를 각각 기억해야 하므로 스택을 사용하는 건가 싶었지만, 이전의 내역을 모두 알아야하는게 아니므로 단순히 각 경우의 변수를 만들어 변수에 값을 대입해 갱신해주면 되었다.
그리고 키패드 간의 거리를 구하는 방법은 키패드의 숫자와는 상관없고 좌표로 만들어 x좌표의 차이와 y좌표의 차이를 합해주면 된다.
각 키패드에 대한 좌표 값을 dictionary로 만드는게 키포인트 같다.
def distance(l, r, n):
ld = abs(n[0]-l[0]) + abs(n[1]-l[1])
rd = abs(n[0]-r[0]) + abs(n[1]-r[1])
return ld, rd
def solution(numbers, hand):
ans = ''
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]}
l, r = '*', '#'
for i in range(len(numbers)):
if numbers[i] ==1 or numbers[i] ==4 or numbers[i] ==7:
l = numbers[i]
ans += 'L'
elif numbers[i] ==3 or numbers[i] ==6 or numbers[i] ==9:
r = numbers[i]
ans += 'R'
elif numbers[i] ==2 or numbers[i] ==5 or numbers[i] ==8 or numbers[i] ==0:
l_key = keypad[l]
r_key = keypad[r]
now = keypad[numbers[i]]
ld, rd = distance(l_key, r_key, now)
if ld > rd:
r = numbers[i]
ans += 'R'
elif ld < rd:
l = numbers[i]
ans += 'L'
elif ld == rd:
if hand == "right":
ans += 'R'
r = numbers[i]
elif hand =="left":
ans += 'L'
l = numbers[i]
return ans
if numbers[i] ==1 or numbers[i] ==4 or numbers[i] ==7:
이 부분을 if numbers[i] in [1, 4, 7]:
이렇게 하면 더 간단하다.