안녕하세요

프로그래머스 JS [다음 큰 숫자] 본문

프로그래머스/Lv.2

프로그래머스 JS [다음 큰 숫자]

sakuraop 2022. 11. 6. 23:59
  • 다음 큰 숫자
문제 설명

자연수 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
78 83
15 23

조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.

=> 최소한 1이상 크게 만듭니다.
    let n1 = n+1


조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.

=> 2진수로 변환한 뒤에 1을 걸러낸 배열의 길이를 비교합니다.

    n.toString(2).split("").filter(el=> el == 1).length


조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.
=> while 반복문을 통해 n1의 수를 1씩 크게 만들며 조건2와 일치할 때까지 계속 실행합니다.

 

function
solution(n) {
  let n1 = n+1
 
  while(n.toString(2).split("").filter(el=> el == 1).length !== n1.toString(2).split("").filter(el=> el == 1).length) {
      n1++
  }
  return n1
}