경우의 수를 나누자
- 현재 자리의 수가 5보다 크다
1-1. 올림을 하고 다음자리 숫자에 +1- 현재 자리의 수가 5이다
2-1. 다음자리 숫자가 5보다 크거나 같으면 올림하고 다음자리 숫자에 +1
2-2. 다음자리 숫자가 5보다 작으면 내림- 현재 자리의 수가 5보다 작다.
3-1. 무조건 내림한다.
⭐️ 핵심) 마지막 자리는 올림하면 자리수가 올라갈 수 있음에 주의하자!!
function solution(storey) {
var answer = 0;
let len = storey.toString();
let arr = storey.toString().split('');
arr.reverse();
for(var i =0; i<arr.length; i++){
let value = Number(arr[i]);
if( i !== arr.length-1){
if(value > 5){
answer += 10-Number(arr[i])
arr[i] = 0;
arr[i+1] = Number(arr[i+1])+1;
}else if(value == 5){
if(arr[i+1] >= 5){
answer += 10-Number(arr[i])
arr[i] = 0;
arr[i+1] = Number(arr[i+1])+1;
}else{
answer += Number(arr[i])
}
}else{
answer += Number(arr[i])
}
}else{
if(arr[i] > 5){
answer += 10-Number(arr[i]) + 1
}else{
answer += Number(arr[i])
}
}
}
return answer;
}
경우의 수만 잘 나누어서 풀면 되는 문제이다. 이번 문제를 풀땐 마지막 자리의 값에 따라 자리수가 추가될수있음을 생각하는데 오래걸렸다.
추가적으로 재귀를 이용한 풀이를 가져와보았다.function solution(storey) { if (storey < 5) return storey; const r = storey % 10; const m = (storey - r) / 10; return Math.min(r + solution(m), 10 - r + solution(m + 1)); }