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;
}