[CDT - Javascript] 프로그래머스 연습문제 @ 마법의 엘리베이터

김현수·2024년 1월 12일
0

cdt

목록 보기
46/51


🖋️ 마법의 엘리베이터


# 문제 설명

마법의 엘리베이터의 버튼을 통해 현재 층에서
0층으로 가는 마법의 돌 최소 소모 개수 구하기

  • 조건

    • 이동
      • -1, +1, -10, +10, -100, +100 등과 같은
        절대값이 10^c (c >= 0 인 정수) 버튼 존재

    • 현재 층 수에 버튼에 적혀 있는 값을 더한 층으로 이동
    • 단, 엘리베이터가 위치해 있는 층과
      버튼의 값을 더한 결과가 0보다 작으면 엘리베이터는 멈춤

    • 0층이 가장 아래층
    • 이동을 위해 버튼 한 번당 마법의 돌 한 개를 사용
  • 매개 변수

    • 민수와 마법의 엘리베이터가 있는 층을 나타내는 정수 storey
  • 반환값

    • 0층으로 가기 위해 필요한 마법의 돌의 최소값을 return

  • 📢 제한사항

    • 1 ≤ storey ≤ 100,000,000

  • 📰 입출력 예시

storeyresult
166
255416



  • CODE

function solution(storey) {
  let answer = Number.MAX_SAFE_INTEGER;

  function dfs(currentFloor, presses) {
    if (presses >= answer) return;
    if (currentFloor === 0) answer = presses;

    else {
      let res = currentFloor % 10;
      
      dfs(Math.floor(currentFloor / 10), presses + res);
      if (res !== 0) {
        dfs(Math.floor(currentFloor / 10) + 1, presses + 10 - res);
      }
    }
  }
    
  dfs(storey, 0);
  return answer;
}

풀이

  • DFS 를 통해 solution 구하기

  • 10을 기준으로 몫과 나머지 구하기
  • 크거나 작을 때 반올림
profile
일단 한다

0개의 댓글