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 |