ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Programmers] 키패드 누르기
    programing/Algorithm 2021. 2. 14. 18:17

    키패드 누르기

    2020 카카오 인턴십

    level 1

     

    phython3

    def sub_tuple(t1, t2):
        return (t1[0] - t2[0], t1[1] - t2[1])
    
    
    def abs_tuple(t):
        return (abs(t[0]), abs(t[1]))
    
    
    def get_proper_hand(hand, left, right, left_location, right_location, target_location):
        left_distance = sum(abs_tuple(sub_tuple(left_location, target_location)))
        right_distance = sum(abs_tuple(sub_tuple(right_location, target_location)))
    
        if left_distance == right_distance:
            return left if hand == 'left' else right
        else:
            return left if left_distance < right_distance else right
    
    
    def solution(numbers, hand):
        # init
        left = 'L'
        right = 'R'
        left_location = (3, 0)
        right_location = (3, 2)
    
        left_hands = [1, 4, 7]
        right_hands = [3, 6, 9]
        center_hands = [2, 5, 8, 0]
    
        result = []
    
        for number in numbers:
            if number in left_hands:
                result.append(left)
                left_location = (left_hands.index(number), 0)
            elif number in right_hands:
                result.append(right)
                right_location = (right_hands.index(number), 2)
            else:
                target_location = (center_hands.index(number), 1)
                proper = get_proper_hand(hand, left, right, left_location, right_location, target_location)
    
                if proper == left:
                    result.append(left)
                    left_location = (center_hands.index(number), 1)
                else:
                    result.append(right)
                    right_location = (center_hands.index(number), 1)
    
        return ''.join(result)
    

    문제의 설명에 따라 단순히 구현만 하면 되는 쉬운 문제입니다.

    해당 문제에서 제일 중요한 것은, 가운데 숫자들을 누를 때 거리를 비교하는 것입니다.

    저는 left_location 과 right_location, taregt_location 을 2차원 배열 상의 인덱스로 생각하여 거리를 구했습니다. 이러면 단순히 각 좌표 값의 차이의 절대값이 거리가 되기 때문입니다.

     

    댓글

Designed by black7375.