FrontEnd/프로그래머스

[JS] 마법의 엘리베이터

728x90

숫자를 뒤부터 확인하면서 5보다 작다면 그대로 , 5보다 크다면 자기 자리보다 한 자리 큰 수에 1을 더해준 후, 본인은 10의 보수를 취한 값을 가져오면 된다.

 

 

2664 라면

 

4 => 5보다작기에 그대로

(2664)

6 => 5보다 크기에 10의 보수인 4로 바꾸어주고 2번째자리를 7로 만들어줌

(2744)

7 => 5보다 크기에 10의 보수인 3으로 바꿔주고 1번째 자리에 1을 더해줌

(3344)

즉 , 14가 답이 나오게 된다.

 

 

단 5일때는 조금 생각해봐야한다.

 

5가 나왔는데 본인 상위자리가 5보다 작다면 5를 올림할 필요가 없지만, 그외의 경우라면 올림을 해주어야한다.

 

 

 

function solution(storey) {
    let ary = [0, ...[...storey+''].map(v => +v)]
    
    for (let i=ary.length-1 ; i>0 ; i--){
        if (ary[i] < 5) continue
        else if (ary[i] === 5 && ary[i-1] < 5) continue
        
        ary[i] = 10 - ary[i]
        ary[i-1] ++;
        
    }
    return ary.reduce((a,c) => a+c , 0)
}

 

 

 

이문제는 풀 수 있는 방법이 꽤 많은거 같다.

사실 자리수가 10자리수가 최대이기에, 올리거나 버리거나 하는 경우의수를 세도 별로 안 나오기 때문에 DFS로도 풀만한 문제였을 것 같다.

728x90

'FrontEnd > 프로그래머스' 카테고리의 다른 글

[JS] 테이블 해시 함수  (0) 2023.05.31
[JS] 유사 칸토어 비트열  (0) 2023.05.30
[JS] 이모티콘 할인 행사  (0) 2023.05.27
[JS] 택배 배달과 수거하기  (0) 2023.05.26
[JS] 시소 짝꿍  (0) 2023.05.26