본문 바로가기
알고리즘

[Python] 프로그래머스 - 키패드 누르기

by 고고 2021. 11. 3.

프로그래머스 문제 : 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

 

안녕하세요 ◠‿◠  고고입니다.

오늘은 프로그래머스에 있는 2020 카카오 인턴십 키패드 누르기를 풀어보았습니다.

 

1에서 4까지의 거리는 1입니다. 4 / 3 = 1 입니다.

1에서 5까지의 거리는 2입니다. 4 / 3 + 4 % 3 = 1 + 1 = 2 입니다.

3으로 나눈 몫과 나머지를 더하면 거리를 구할 수 있습니다.

 

def solution(numbers, hand):
    answer = ''
    left = 10
    right = 12

    for number in numbers:
        if number in [1,4,7]:
            left = number
            answer += 'L'
        elif number in [3, 6, 9]:
            right = number
            answer += 'R'
        else:
            if number == 0:
                number = 11
            # a부터 b까지의 거리 = abs(a - b) / 3 + abs(a - b) % 3
            Ldiff = int(abs(left - number) / 3) + abs(left - number) % 3
            Rdiff = int(abs(right - number) / 3) + abs(right - number) % 3

            if Ldiff < Rdiff:
                left = number
                answer += 'L'
            elif Ldiff > Rdiff:
                right = number
                answer += 'R'
            else:
                if hand == 'left':
                    left = number
                    answer += 'L'
                else:
                    right = number
                    answer += 'R'

    return answer

print(solution([1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5], "right")) # "LRLLLRLLRRL"
print(solution([7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2], "left")) # "LRLLRRLLLRR"
print(solution([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], "right")) # "LLRLLRLLRL"

댓글