프로그래머스 다음 큰 숫자 in Javascript

PEPPERMINT100·2020년 11월 13일
0

문제

자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.

조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.
예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.

자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.

제한 사항
n은 1,000,000 이하의 자연수 입니다.

접근

가장 처음엔 number 타입의 숫자를 이진수로 바꾸는 함수를 작성해보려고 했다. 하지만 Javascript의 toString 메소드를 이용하여 쉽게 변경이 가능했다.

const n = 50;
const bin = n.toString(2);// 110010
const hex = n.toString(16); // 32

위처럼 toString의 파라미터에 몇 진수로 변환시킬건지 넣어주면 string의 형태로 값을 변환시켜준다. 이를 이용하면 간단하게 해결할 수 있다. 정답 코드는 아래와 같다.

function solution(n){
    const count = dec2bin(n); 
    while(1){
        if(dec2bin(++n) === count){
            return n;
        }
    } 
}
function dec2bin(dec){
    const bin = (dec >>> 0).toString(2).split("");
    let count = 0;
    for(let b of bin){
        if(b ==="1"){
            count+=1;
        }
    }
    return count;
profile
기억하기 위해 혹은 잊어버리기 위해 글을 씁니다.

0개의 댓글