알고리즘
[알고리즘] 프로그래머스 키패드 누르기
오승미
2022. 3. 1. 21:25
📍 맨하탄 거리 계산법
| x1 - x2 | + | y1 - y2 |
✔️ code
def solution(numbers, hand):
answer = ''
keyboard= { 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)
}
lh='*' #왼손
rh='#' #오른손
for i in numbers:
if i in [1, 4, 7]:
lh=i
answer+='L'
elif i in [3, 6, 9]:
rh=i
answer+='R'
else: #맨하탄 거리 계산법 사용(블럭 기준)
Ldistance=abs(keyboard[lh][0]-keyboard[i][0])+abs(keyboard[lh][1]-keyboard[i][1])
Rdistance=abs(keyboard[rh][0]-keyboard[i][0])+abs(keyboard[rh][1]-keyboard[i][1])
if Ldistance<Rdistance:
lh=i
answer+='L'
elif Rdistance<Ldistance:
rh=i
answer+='R'
else:
if hand=='left':
lh=i
answer+='L'
else:
rh=i
answer+='R'
return answer
# solve
가운데에 위치한 [2, 5, 8, 0] 문제를 해결하기 위해,
dict 형태의 keyboard의 key에는 키패드를 value에는 좌표값을 설정해 두었다.
그리고 현재 손이 위치한 키패드와 입력받은 키패드 간의 거리를 계산하면 되는데
맨하탄 거리 계산법을 사용하지 않고 직선의 거리 구하기 공식을 사용하면 오류가 난다.