출처: https://meyouus.tistory.com/64 [정보 공유 - For Me For You For Us]
본문으로 바로가기

 

풀고 나서 카카오 인턴 문제인 것을 깨달았다. 엄청나게 고민을 오랫동안 한 문제이다:

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_lenr_len 의 값을 비교하여 손가락을 움직여주는 것으로 정의하고, result 값을 돌려준다.