난이도: Lv. 2
정답률: 49%
문제: https://school.programmers.co.kr/learn/courses/30/lessons/148653
알고리즘
- 현재 층의 일의 자리 숫자가 5보다 크면 일의 자리 숫자가 0이 되도록 층을 올라간다. 현재 층의 십의 자리 바뀔 것이므로 현재 층에서 10으로 정수 나눗셈을 하고, 1을 더한다. 이번에 사용한 마법의 돌은 (10 - 현재 층의 일의 자리 숫자)이다.
- 현재 층의 일의 자리 숫자가 5보다 작으면 내려간다. 현재 층을 10으로 정수 나눗셈하고, 사용한 마법의 돌은 현재 층의 일의 자리 숫자와 동일하다.
- 현재 층의 일의 지리 숫자가 5면 십의 자리 숫자도 봐야 한다. 십의 자리 숫자가 5 이상이면 위층으로 올라가야 하고, 5 미만이면 아래층으로 내려가야 한다.
- 현재 층이 0이 될 때까지 1 ~ 3 분기문을 반복한다.
코드
function solution(storey) {
let answer = 0, newStorey = storey, stoneNum;
function storeyUp(units) {
return [10 - units, newStorey + 1];
}
while (newStorey > 0) {
const units = newStorey % 10;
newStorey = Math.floor(newStorey / 10);
stoneNum = units;
if (units > 5) {
[stoneNum, newStorey] = storeyUp(units);
} else if (units === 5) {
const tens = newStorey % 10;
if (tens >= 5)
[stoneNum, newStorey] = storeyUp(units);
}
answer += stoneNum;
}
return answer;
}
'코딩테스트' 카테고리의 다른 글
[JS] 호텔 대실 (0) | 2024.05.27 |
---|---|
[JS] 시소 짝꿍 (0) | 2024.05.07 |
[JS] 메뉴 리뉴얼 (1) | 2024.04.16 |
[JS] 전력망을 둘로 나누기 (0) | 2024.04.09 |
[JS] 124 나라의 숫자 (0) | 2024.04.05 |