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;
}

 

이렇게 하니 효율성 검사도 모두 통과했다. 

반응형