고딩왕 코범석

[프로그래머스] 키패드 누르기, Python3 본문

Computer Science/Algorithm

[프로그래머스] 키패드 누르기, Python3

고딩왕 코범석 2021. 1. 6. 09:58
반응형

이번 포스팅에서는 2020 카카오 인턴십 코딩테스트 문제 중 첫 번째 문제인 키패드 누르기 문제에 대해 풀이를 해볼 것이다.

image

image

  • 나의 풀이 방법
    1. 키패드를 딕셔너리로 표현했다.
    2. 문제에서 1,4,7 은 왼손, 3,6,9는 오른손으로 눌러야하기 때문에 left, right 라는 배열을 만들어서 저장해두었다.
    3. 2,5,8,0을 누를 때 마다 왼손, 오른손의 거리를 비교해야 한다. 이 때를 위해 현재 왼쪽, 오른쪽의 위치를 저장해두는 변수를 설정했다. (초기값 왼쪽 : *, 오른쪽 : #)
    4. 현재 손가락의 위치에서 누를 번호까지의 거리를 계산하는 메서드를 따로 작성했다.
    5. 거리가 같다면 hand 변수에 써있는 값을 통해 왼손으로 누를지, 오른손으로 누를지 결정한다.
def get_distance(now, destination):
    return abs(now[0] - destination[0]) + abs(now[1] - destination[1])


def solution(numbers, hand):
    answer = ''
    number_directions = {
         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),
         '*': (3, 0), 0: (3, 1), '#': (3, 2)
    }

    left_no = [1, 4, 7]
    right_no = [3, 6, 9]

    left, right = '*', '#'
    for i in numbers:
        if i in left_no:
            answer += 'L'
            left = i
        elif i in right_no:
            answer += 'R'
            right = i
        else:
            left_distance = get_distance(number_directions[left], number_directions[i])
            right_distance = get_distance(number_directions[right], number_directions[i])
            if left_distance > right_distance:
                answer += 'R'
                right = i
            elif left_distance < right_distance:
                answer += 'L'
                left = i
            else:
                if hand == "left":
                    answer += 'L'
                    left = i
                else:
                    answer += 'R'
                    right = i

    return answer

image

기모찌한 파란글씨

문제는 여기에서 풀어보길 바랍니다! 그럼 20,000!

반응형