본문 바로가기
알고리즘 & PS

[프로그래머스] 마법의 엘리베이터 (Lv 2)

by 다람이도토리 2024. 10. 27.

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

풀이의 핵심은 "5"에 있다. 기본적으로 올림 또는 내림이다. 그런데, 5의 경우는 <그 다음 수>에 영향을 미친다.
다시 말해, 십의자리가 5보다 크거나 같을  경우, 올림을 하면 다음 번에 올림을 하며 버튼 누르는 횟수를 줄이게 된다.
십의 자리가 5보다 작을 경우, 버림을 하면 다음번에 버림을 하며 버튼 누르는 횟수를 줄이게 된다.

이를 고려해야 모든 경우를 고려, 매 턴마다 최저 턴수로 넘기는 그리디한 선택을 할 수 있다.

약간의 수리사고력이 필요한 문제. 코드는 쉽다.

def solution(storey):
    answer = 0
    while storey > 0:
        if storey%10 > 5:
            answer += 10 - (storey%10)
            storey = storey // 10 + 1
        elif storey%10 < 5:
            answer += (storey % 10)
            storey = storey // 10
        else:
            # 5일 경우, 아무튼 5번 해야 하는데 그 다음이 중요함.
            if storey%100 <= 50: #5, 15, 25, 35, 45
                answer += 5
                storey = (storey - 5) // 10 
            else: # 55, 65, 75, 85, 95
                answer += 5
                storey = (storey + 5) // 10
    return answer