풀고 나서 카카오 인턴 문제인 것을 깨달았다. 엄청나게 고민을 오랫동안 한 문제이다:
def solution(numbers, hand):
place = [10, 12]
left_hand = [1,4,7,10]
right_hand = [3,6,9,12]
neutral_hand = [2,5,8,0]
coordinates = {10: [0,0], 7:[0,1], 4:[0,2], 1:[0,3], 0:[1,0], 12:[2,0], 8:[1,1], 5:[1,2], 2:[1,3], 9:[2,1], 6:[2,2], 3:[2,3]}
l_len = 0
r_len = 0
result = ''
for i in numbers:
if i in left_hand:
result += 'L'
place[0] = i
elif i in right_hand:
result += 'R'
place[1] = i
elif i in neutral_hand:
i_coordinate = coordinates[i]
l_coordinate = coordinates[place[0]]
r_coordinate = coordinates[place[1]]
l_len = abs(i_coordinate[0] - l_coordinate[0]) + abs(i_coordinate[1] - l_coordinate[1])
r_len = abs(i_coordinate[0] - r_coordinate[0]) + abs(i_coordinate[1] - r_coordinate[1])
if l_len > r_len:
result += 'R'
place[1] = i
elif l_len < r_len:
result += 'L'
place[0] = i
elif l_len == r_len:
if hand == 'right':
result += 'R'
place[1] = i
elif hand == 'left':
result += 'L'
place[0] = i
return result
왼쪽줄에 있는 숫자와 오른쪽 줄에 있는 숫자가 주어졌을 때는 어떻게 해야될지 감이 잡혔었다. 하지만 만약 중간 줄에 있는 숫자라면 어떻게 해야될지 감이 안 잡혔다. 어떻게 해야 오른손 엄지손가락과 숫자의 거리를 / 왼손 엄지손가락과 숫자의 거리를 어떻게 해야 비교를 하고 측정해야될지 몰랐다.
그러던 중... 만약 좌표계를 쓴다면 어떨까?라는 생각이 들었고 이를 사용하면 비교적 매우 간단하게 풀 수 있다는 것을 깨닫고 바로 실행에 옮겼다.
place 리스트는 place[0] 는 왼손 엄지손가락이 현재 있는 위치, place[1] 는 오른손 엄지손가락이 현재 있는 위치를 나타내준다.
l_len 는 현재 왼손 엄지손가락으로 부터 주어진 숫자까지의 거리, r_len 는 현재 오른손 엄지손가락으로 부터 주어진 숫자까지의 거리이다.
마지막으로 l_len 과 r_len 의 값을 비교하여 손가락을 움직여주는 것으로 정의하고, result 값을 돌려준다.
'알고리즘 테스트 > 프로그래머스 문제풀이 및 해설' 카테고리의 다른 글
<프로그래머스 문제풀이: 콜라츠 추측> Level 1 - 파이썬 (0) | 2020.11.24 |
---|---|
<프로그래머스 문제풀이: 최대공약수와 최소공배수> Level 1 - 파이썬 (0) | 2020.11.23 |
<프로그래머스 문제풀이: 짝수와 홀수> Level 1 - 파이썬 (0) | 2020.11.19 |
<프로그래머스 문제풀이: 제일 작은 수 제거하기> Level 1 - 파이썬 (0) | 2020.11.19 |
<프로그래머스 문제풀이: 정수 제곱근 판별> Level 1 - 파이썬 (0) | 2020.11.19 |