Coding Test/JavaScript
[JS/프로그래머스] 다음 큰 숫자
ea_jung
2023. 7. 9. 20:41

10진법의 수를 2진법으로 바꾸는데는 다양한 방법이 있다.
그 중 n진수를 -> m진수로 바꾸는 방법인 parseInt(num,n).toString(m) 를 사용하여 구현하였다.
function solution(n) {
let answer = n + 1;
function countOnes (n) {
let answer = 0
parseInt(n, 10).toString(2).split('').forEach((x) => {
if (x === '1') {
answer++;
}
});
return answer;
}
while(countOnes(n) !== countOnes(answer)) {
answer++;
}
return answer;
}
하지만 효율성 테스트를 통과하지 못했다.
countOnes() 함수내의 너무 시간복잡도가 커서 그런것 같다.
2진수로 바꾼 후 1의 갯수를 찾는 로직을 다시 짜봐야 겠다.
function solution(n) {
let answer = n + 1;
function countOnes(num) {
let count = 0;
while (num !== 0) {
if (num % 2 === 1) {
count++;
}
num = Math.floor(num / 2);
}
return count;
};
while (countOnes(answer) !== countOnes(n)) {
answer++;
}
return answer;
}
이렇게 하니 효율성 검사도 모두 통과했다.
반응형