[프로그래머스] Lv2. 마법의 엘리베이터- JavaScript

이상돈·2023년 7월 9일
0
post-thumbnail

문제분류 : 코팅테스트 연습

난이도 : Level 2

출처 : 프로그래머스 - 마법의 엘리베이터

문제

제한사항

📌 내가 생각한 풀이

경우의 수를 나누자
  1. 현재 자리의 수가 5보다 크다
    1-1. 올림을 하고 다음자리 숫자에 +1
  2. 현재 자리의 수가 5이다
    2-1. 다음자리 숫자가 5보다 크거나 같으면 올림하고 다음자리 숫자에 +1
    2-2. 다음자리 숫자가 5보다 작으면 내림
  3. 현재 자리의 수가 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));
}
profile
사람들의 더 나은 삶을 위한 개발자

0개의 댓글