programmers Level1 (4)

Backend, DataEngineer·2021년 11월 29일
0
post-thumbnail

카카오인턴십-2020 키패드 누르기

최고 답안

def get_distance(keypad, finger_position,next_number):
    next_number_position = keypad[next_number]
    
    distance = abs(finger_position[0] - next_number_position[0]) + abs(finger_position[1] - next_number_position[1])
 
    return distance

def solution(numbers, hand):
    result = ''
    keypad = { 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], 0: [3, 1] }
    
    left_finger_numbers = [1, 4, 7] 
    right_finger_numbers = [3, 6, 9] 
    center_finger_numbers = [2, 5, 8, 0] 
    
    left_finger_position = [3, 0] 
    right_finger_position = [3, 2]

    for number in numbers:
        if number in left_finger_numbers:
            result += 'L'
            left_finger_position = keypad[number]
        elif number in right_finger_numbers:
            result += 'R'
            right_finger_position = keypad[number]
        else:
            left_finger_distance = get_distance(keypad, left_finger_position,number)
            right_finger_distance = get_distance(keypad, right_finger_position, number)
            if left_finger_distance > right_finger_distance:
                result+='R'
                right_finger_position = keypad[number]
            elif left_finger_distance < right_finger_distance:
                result+='L'
                left_finger_position = keypad[number]
            elif left_finger_distance == right_finger_distance:
                result += hand[0].upper()
                if hand == 'right':
                    right_finger_position = keypad[number]
                elif hand == 'left':
                    left_finger_position = keypad[number]
    return result

느낀점: 문제를 이해하고 적용하려하니 적용하기 어려운 부분이 많았다.
충족시켜야할 조건이 많아 굉장히 머리가 아팠다. 알고리즘을 짤때 각 번호들끼리의 거리는 어떻게 계산해야할지 막막했다. 머리를 싸매고 싸매다가 문제풀이를 보기로 결정했다. 문제풀이를 보니 keypad라는 딕셔너리를 통해 각 숫자의 위치정보를 저장하고, 이를 통해 현재 손가락 위치와 숫자사이의 거리를 구하는 함수를 만들수 있었다. 이 거리를 구하는 함수를 가지고 가장가까운 손의 위치를 구할 수 있었다. 이번 문제 풀이를 통해 현재의 정보를 가지고 최단거리를 구하는 문제의 접근 방법을 배울수 있었다.

profile
오늘 더 좋은 사람, 더 좋은 하루

0개의 댓글

관련 채용 정보