본문 바로가기
코딩공부/프로그래머스 (python)

[프로그래머스] 키패드 누르기 (python)

by CodingKwon 2021. 7. 26.

문제 링크 (Level 1)

https://programmers.co.kr/learn/courses/30/lessons/67256

 

코딩테스트 연습 - 키패드 누르기

[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"

programmers.co.kr

 

나의 코드 (python)

def solution(numbers, hand):
    answer = ''

    # 다이얼 배열
    left = [1,4,7]
    right = [3,6,9]
    mid = [2,5,8,0]

    # a는 '*' 위치상 10
    a = 10
    # b는 '#' 위치상 12
    b = 12
    
    # 다이얼을 받아옴
    for num in numbers:
        if num in left:
            # 왼쪽 손가락 위치 다이얼은 L
            a = num
            answer += "L"
        elif num in right:
            # 오른쪽 손가락 위치느 다이얼은 R
            b = num
            answer += "R"
        elif num in mid:
            # 중앙이면 여러 가지를 검증한다.
            # 다이얼 0일때는 위치상 11로 계산
            if num == 0:
                num = 11

            # 중앙 다이얼과 왼쪽 오른쪽의 차이를 구함
            a1 = abs(num - a)
            b1 = abs(num - b)

            # 차이를 구한 값에 3을 나눈 값 + 차이를 구한 값에 3의 나머지 값으로 거리를 구함
            # 왼쪽과 오른쪽을 비교
            if a1//3 + a1%3 < b1//3 + b1%3:
                a = num
                answer += "L"
            elif a1//3 + a1%3 > b1//3 + b1%3:
                b = num
                answer += "R"
            else:
                # 차이가 같은 경우 왼손잡이인지 오른손잡이인지 판단
                if hand == "left":
                    a = num
                    answer += "L"
                else:
                    b = num
                    answer += "R"

    # 결과
    return answer

 

이 문제는 왼쪽 손가락 1,4,7,10(*)과 오른쪽 손가락 3,6,9,12(#)은 간단하게 해결할 수 있지만 중앙값 2,5,8,0(11)은 쉽게 해결하기 힘듭니다.

 

중앙의 다이얼은 거리를 계산해서 풀어야 합니다. 중앙값과의 차이를 3으로 나눈 몫 값과 중앙값과의 차이를 3으로 나눈 나머지 값을 더해준다면 다이얼의 거리를 계산할 수 있습니다. 이 방식으로 어느 손가락을 쓸지를 판단하고 차이가 같은 경우 어느 손 잡이인지로 판단하여 누를 손가락을 정하면 됩니다.

댓글