function solution(n) {
var answer = new Array(18).fill(0);
var num = n;
for (let i = 18; i > -1; i--) {
const powNum = Math.pow(3, i);
if (i === 0) {
answer[i] === num;
} if (num >= powNum * 2) {
answer[i] = 2;
num-=powNum*2;
} else if (num >= powNum) {
answer[i] = 1;
num-=powNum;
}
}
answer.reverse();
while (true) {
answer = answer.slice(answer.findIndex(item => item > 0));
if (answer.indexOf(0) === -1) {
break;
}
for (let i=1; i<answer.length; i++) {
if (answer[i-1] > 0 && answer[i] === 0) {
answer[i-1]-=1;
answer[i] = 3;
}
}
}
return answer.filter(item => item !==0).map(item => {
if (item === 3) return 4;
else return item;
}).join("");
}
3진법 접근은 좋았다. 그리곤 큰 수부터 쪼개고 뺄게 아니라 뒤에서부터 %로 나눠가면서 처리하는게 더 좋았을 것 같다.
그래도 고생했다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][자바스크립트][Level2][카카오] 오픈채팅방 (0) | 2021.07.22 |
---|---|
[프로그래머스][자바스크립트][Level2][카카오] 문자열 압축 (0) | 2021.07.22 |
[프로그래머스][자바스크립트][Level2] 타겟 넘버 (0) | 2021.07.20 |
[프로그래머스][자바스크립트][Level2] 짝지어 제거하기 (0) | 2021.07.20 |
[프로그래머스][자바스크립트][Level2] 기능개발 (0) | 2021.06.30 |
댓글