프로그래머스 마법의 엘리베이터 JavaScript
2023년 1월 11일
문제 풀이
매개변수 storey 는 현재 층을 나타내고, 현재 층에서 절대값 10^c (c >= 0 인 정수) 형태인 정수들이 적힌 버튼을 조작해 0층으로 최소한의 버튼만 조작해 내려가야 하는 문제다.
현재 층 currentStorey
가 0층이 될 때까지 while 문을 돌린다. 현재 층에서 10을 나누어 나온 몫과 나머지를 이용하는데,
나머지가 5보다 크면서 몫의 맨 오른쪽 값이 5보다 클 경우와 나머지가 6보다 큰 경우에 몫에 +1 해준다.
45 -> 40 -> 0 = 9
95 -> 100 -> 0 = 6
55 -> 60 -> 100 -> 9 = 10
나머지가 5와 같거나 큰 경우 + 버튼을 조작해 10 - 나머지만큼, 나머지가 5보다 작으면 - 버튼을 조작하여 나머지 만큼 answer
에 더해주고 현재층을 몫으로 갱신한다.
solution.js
function solution(storey) {
let answer = 0;
let currentStorey = storey;
while (currentStorey !== 0) {
const remainder = currentStorey % 10;
const quotient = Math.floor(currentStorey / 10);
const quotientStr = String(quotient);
const updown = remainder >= 5 ? 10 - remainder : remainder;
currentStorey = ((remainder >= 5 && quotientStr[quotientStr.length-1] >= 5) || remainder >= 6) ? quotient+1 : quotient;
answer += updown;
}
return answer;
}