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
'알고리즘 & PS' 카테고리의 다른 글
[프로그래머스] 석유 시추 (Lv 2) (0) | 2024.10.27 |
---|---|
[프로그래머스] 거리두기 확인하기 (Lv 2) (0) | 2024.10.27 |
[프로그래머스] 구명보트 (0) | 2024.10.21 |
[프로그래머스] 과제 진행하기 (Lv 2) (0) | 2024.10.16 |
[프로그래머스] 시소 짝꿍(Lv 2) (0) | 2023.12.31 |