구현
- 문제가 요구하는 사항에 맞춰 구현하여 해결 가능한 문제이다.
로직
- 주어진 매개 변수의 값 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
}