Programming/프로그래머스

프로그래머스 - 마법의 엘리베이터 (파이썬)

pental 2025. 3. 29. 03:18

분류 : 그리디

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/148653

풀이

엘리베이터가 버튼을 눌러 층을 이동하는데,

위층으로 1칸, 아래층으로 1칸 이동이 가능하고, +10, +100 등도 가능하다.

목표층에서 0층으로 이동하는 최소 버튼 횟수를 구하는 문제이다.

즉, 각 자릿수를 기준으로 반올림 또는 내림하여 효율적인 방법으로 움직이는 그리디 알고리즘 문제이다.

while storey > 0 :
    digit = storey % 10
    next_digit = (storey // 10) % 10

현재 숫자를 1의 자리부터 확인하면서, 다음 자릿수가 4 이상인지 여부에 따라 반올림 할지 내릴지 결정한다.

if digit > 5 or (digit == 5 and next_digit >= 5) :
    answer += 10 - digit
    storey += 10  # 올림 → 다음 자리수에 영향

예룰 들어 7인경우 +3을 눌러서 10으로 올리고, 다음 자리에 반영하고,

5인데 다음 자릿수가 6이면 올리는게 유리하기에 마찬가지로 올림처리를 진행한다.

else :
    answer += digit  # 그대로 내려가면 됨

내리는 경우에는 그냥 3번 아래로 누르고 끝

코드

def solution(storey):
    answer = 0
    
    while storey > 0 :
        digit = storey % 10
        next_digit = (storey // 10) % 10
        if digit > 5 or (digit == 5 and next_digit >= 5) :
            answer += 10 - digit
            storey += 10
        else :
            answer += digit
        
        storey //= 10
    return answer