Coding Problem
[프로그래머스] 마법의 엘리베이터
Yepchani
2025. 1. 2. 18:35
반응형
문제
마법의 엘리베이터
https://school.programmers.co.kr/learn/courses/30/lessons/148653
풀이
설명
0층으로 가기 위해 필요한 마법의 돌의 최솟값을 구하는 문제입니다.
엘리베이터는 현재 층에서 절댓값이 10 ^ c (c >= 0인 정수) 형태인 정수만큼 위아래로 갈 수 있습니다.
따라서 현재 층의 가장 마지막 자릿수부터 0 또는 10으로 만들어 나가면 최솟값을 구할 수 있습니다.
6층의 경우, 0층으로 가기 위해서는 -1을 6번 누르거나, +1을 4번 누르고 -10을 1번 누를 수 있습니다. 따라서 10을 거쳐가는 게 빠릅니다.
마지막 자릿수에 따라 다음과 같이 움직입니다
- 5보다 작은 경우, 0으로 갑니다.
- 5보다 큰 경우, 10으로 갑니다.
- 5인 경우, 다음 자릿수에 따라 달라집니다.
- 다음 자릿수가 5보다 작은 경우, 0으로 갑니다.
- 다음 자릿수가 5 이상인 경우, 10으로 갑니다.
예시 코드
function solution(storey) {
let magicStones = 0;
while (storey > 0) {
const lastDigit = storey % 10;
if (lastDigit < 5) magicStones += lastDigit;
else if (lastDigit > 5) {
magicStones += 10 - lastDigit;
storey += 10 - lastDigit;
} else {
const nextDigit = Math.floor(storey / 10) % 10;
magicStones += lastDigit;
if (nextDigit >= 5) storey += lastDigit;
}
storey = Math.floor(storey / 10);
}
return magicStones;
}