Coding test

[프로그래머스] 다음 큰 숫자 (Lv 2) - javascript

Jiwoo 2022. 5. 19. 16:10

문제

자연수 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 이하의 자연수 입니다.
     

나의 풀이

function solution(n) {

    let answer = n + 1;
    n = n.toString(2).split('');
    let nCount = n.filter(v => v === '1').length;

    while(true) {
        let count = answer.toString(2).split('').filter(v => v === '1').length;
        if(count === nCount) return answer;
        else answer ++;
    }
}

처음에는 이진수로 바꾼 후, 규칙을 찾으려고 해서 방향을 완전히 잘못 잡았다.
구현은 크게 어렵지 않았다.

 

  • 정확도 테스트 결과


     

  • 효율성 테스트 결과


     

다른 풀이

function solution(n) {

    let count = n.toString(2).match(/1/g).length;

    while(n++) {
        if(n.toString(2).match(/1/g).length === count) return n;
    }
}

 
정규식을 사용하자 코드 길이가 줄어들었다.
그리고 어차피 n에서 1을 증가하고 시작해야하니 while의 조건문에 증감자를 사용했다.
여러모로 많은 것을 배운 코드.
 

  • 정확도 테스트 결과


     

  • 효율성 테스트 결과


     


참고

www.zerocho.com/category/Algorithm