최대 1 분 소요

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.0

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;
}

실행결과_js ver 1.1


업데이트: