본문 바로가기
Algorithm/프로그래머스

Level2. 프로그래머스 다음 큰 숫자 - JavaScript

by 강깅꽁 2020. 11. 4.
반응형

 

문제 설명

어떤 수 n이 주어 질 때 n 보다 큰 자연수이고 2진수 변화 시 1의 개수가 같아야 한다. 

또한 위의 조건을 만족하는 수 중 가장 작은 수라는 말이 있는데 

이 뜻은 15(1111) 23(10111) 27(11011)이 있다고 했을 때

15보다 큰 수 중에 조건을 만족하는 수 는 많지만 가장 작은수는 23이기 때문에 23이 정답이다.

 

접근

1. n을 2진수로 변환하고 1의 개수를 가져와 a변수에 저장

2. for문을 num(n+1)을 시작으로 1,000,000 이하의 자연수까지 돌린다.

3. num을 2진수 변환하고 1의 개수를 가져와서 a와 비교하여 일치하면 리턴 아니면 계속 돌린다.

 

function solution(n) {
    var answer = 0;
    const MAX_N = 1000000;
    const binary = n.toString(2);
    const binaryOneCount = getOneCountFromBinary(binary)
    for( let num = n+1; num <= MAX_N; num++){
        let nextBinary = num.toString(2);
        if( getOneCountFromBinary(nextBinary) === binaryOneCount ) {
            answer = num;
            break;
        }
    }
    return answer;
}

function getOneCountFromBinary(binary){
    let count = 0;
    for(let char of binary) {
        if( char === '1' ) count +=1; 
    }
    return count;
}