
이번 문제는 프로그래머스의 LV1문제치고 다른문제보다는 어렵다고 생각되었다.
def m_distance(num, hand): #맨하튼 디스탠스
x = abs(num[0]-hand[0])
y = abs(num[1]-hand[1])
return x+y
def solution(numbers, hand):
answer = ''
right = "#"
left = "*"
cord = {1: [0,0], 2: [1,0], 3: [2,0],
4: [0,1], 5: [1,1], 6: [2,1],
7: [0,2], 8: [1,2], 9: [2,2],
"*": [0,3], 0:[1,3], "#": [2,3]}
for num in numbers:
if num in [1, 4, 7]:
answer += "L"
left = num
elif num in [3, 6, 9]:
answer += "R"
right = num
else:
r = m_distance(cord[num], cord[right])
l = m_distance(cord[num], cord[left])
if r < l:
answer += "R"
right = num
elif r > l:
answer += "L"
left = num
else:
if hand == "right":
answer += "R"
right = num
else:
answer += "L"
left = num
return answer
먼저 입력값의 숫자중 1, 4, 7은 무조건 왼손 3, 5, 9는 무조건 오른손으로 누르게 되있어서 그부분은 쉬었고 문제는 숫자가 2, 4, 8, 0 일때 오른손으로 누를지 왼손으로 누를지를 계산하는 거였다.
먼저 문제에서 설명한 숫자와 손가락 사이의 거리는 맨하탄 distance 였기 때문에 다음과 같은 방식으로 문제를 풀어나갔다.
cord라는 변수에 키패드에 대한 (x, y) 좌표를 dict형으로 만들어놓았다.
m_distance()함수를 생성해 숫자의 좌표와 손가락의 좌표를 계산하는 함수를 만들었다.