프로그래머스 - 마법의 엘리베이터
part12. 마법의 엘리베이터
js ver 1.0
function solution(storey) {
const temp = [...(storey).toString()]; // 각 자리수 배열화
// 일의 자리부터 5이상인지 판별
for (let i = temp.length - 1; i >= 0; i--) {
if (temp[i] >= 5) {
cnt += 10 - Number(temp[i]); // 올라가기
if (i ==0) {
if(temp[i] != 5){ // 5는 제외
cnt++; // 맨 앞자리 인 경우 + 1 더하기
}
} else {
if(temp[i] != 5 || temp[i-1] >= 5){ // 해당 자리수가 5이면서 앞자리가 5보다 작은 인경우는 내려갔다 판단하여 제외
temp[i - 1]++; // 올라갔으니 앞 자리수 + 1 증가
}
}
} else {
cnt += Number(temp[i]);
}
}
return cnt;
}
js ver 1.1
function solution(storey) {
let answer;
function dfs(num, counter) {
if (counter >= answer) return; // 최적의 정답 끌어내기
if (num === 0){ // 엘리베이터 작동 끝
answer = counter;
} else {
let res = num % 10; // 일의 자리수 구해서 처리
dfs(Math.floor(num / 10), counter + res); // 내려갔을 경우
dfs(Math.floor(num / 10) + 1, counter + 10 - res); // 올라간 경우
}
}
dfs(storey, 0);
return answer;
}