프로그래머스 [다음 큰 숫자] - 구현 Lv.2

JH.P·2022년 7월 29일

구현

  • 문제가 요구하는 사항에 맞춰 구현하여 해결 가능한 문제이다.

로직

  • 주어진 매개 변수의 값 n을 2진수로 변환한 다음, 해당 2진수에서 1의 갯수를 따로 변수를 만들어 값으로 저장한다.
  • n을 1씩 증가시키면서, 동시에 2진수로 변환시켜 1의 갯수를 위 과정에서 저장한 1의 갯수와 비교한다.
  • 갯수가 다르다면, 계속해서 n을 1씩 증가시키고, 갯수가 같다면 해당 n을 반환한다.

코드

function solution(n) {
    // 1. n을 2진수로 변환한 것을 저장 후, 1의 갯수 저장
    // 2. n을 1씩 늘려보면서, 2진수로 변환
    // 3. 2진수로 변환한 값의 1의 갯수를 1과 비교
    // 4. 같으면 return

   const bitNum = (arr, num) => {       // num의 2진수를 구하여 1의 갯수를 구해주는 함수
    let divide = num
    let rest
     while(divide > 1) {
        arr.push(divide % 2)    // 나머지 저장
        divide = Math.floor(divide / 2) // 몫 다시 구하기
        if(divide === 1) {
            arr.push(divide)
        }
    }  
       return arr.filter(item => item === 1).length
   } 
  
   const nOneNum = bitNum([], n)     // n의 2진수로 변환한 후 1의 갯수
   let answer = n + 1
   let answerNum = bitNum([], answer)
   while(answerNum !== nOneNum) {
         answer += 1
        answerNum = bitNum([], answer)
         }
    return answer
}
profile
꾸준한 기록

0개의 댓글