[프로그래머스] 다음 큰 숫자 - 자바스크립트

더미벨·2022년 10월 17일
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 이하의 자연수 입니다.


💡입출력 예

nresult
7883
1523

입출력 예#1
문제 예시와 같습니다.

입출력 예#2
15(1111)의 다음 큰 숫자는 23(10111)입니다.





✏️나의 풀이

function solution(n) {
    var answer = n;
  //n을 2진수로 변환했을 때의 1의 갯수
    let num1 = n.toString(2).split("").filter(x=>x === "1").length
    
    
    while(true) {
      //조건식을 만족할 때까지 answer에 1씩 +
        answer++
      //answer를 2진수로 변환했을 때의 1의 갯수
        let num2 = answer.toString(2).split("").filter(x=>x === "1").length 
         if(num1 === num2) {
            break;
        }     
    }
 
    return answer;
}

✏️ 풀이 설명

먼저 toString을 이용해 인자 n을 2진수로 바꿔주고, split("")을 사용해 배열로 만들어준 뒤 filter함수를 통해 "1"인 요소들만 남겨주었다. 이 배열의 길이는 곧 n을 2진수로 변환했을 때 1의 갯수가 된다.

이후 while문을 통해 answer의 값을 1씩 더하며 위의 식과 같이 2진수 answer의 1의 갯수를 구해주고, 2진수 n의 1의 갯수와 2진수 answer의 1의 갯수가 같아질 때(num1 === num2) break를 통해 while문을 빠져나온다.

조건을 만족하는 숫자 중 가장 작은 수를 리턴해야되므로 answer가 답이 된다.

profile
프론트엔드 개발자👩‍💻

0개의 댓글