반응형
문제
마법의 엘리베이터
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;
}
'Coding Problem' 카테고리의 다른 글
[프로그래머스] 호텔 대실 (0) | 2025.01.04 |
---|---|
[프로그래머스] 삼각 달팽이 (0) | 2025.01.03 |
[프로그래머스] 가장 긴 팰린드롬 (1) | 2025.01.01 |
[프로그래머스] 2개 이하로 다른 비트 (0) | 2024.12.31 |
[프로그래머스] N-Queen (0) | 2024.12.30 |