반응형
문제 설명
어떤 수 n이 주어 질 때 n 보다 큰 자연수이고 2진수 변화 시 1의 개수가 같아야 한다.
또한 위의 조건을 만족하는 수 중 가장 작은 수라는 말이 있는데
이 뜻은 15(1111) 23(10111) 27(11011)이 있다고 했을 때
15보다 큰 수 중에 조건을 만족하는 수 는 많지만 가장 작은수는 23이기 때문에 23이 정답이다.
접근
1. n을 2진수로 변환하고 1의 개수를 가져와 a변수에 저장
2. for문을 num(n+1)을 시작으로 1,000,000 이하의 자연수까지 돌린다.
3. num을 2진수 변환하고 1의 개수를 가져와서 a와 비교하여 일치하면 리턴 아니면 계속 돌린다.
function solution(n) {
var answer = 0;
const MAX_N = 1000000;
const binary = n.toString(2);
const binaryOneCount = getOneCountFromBinary(binary)
for( let num = n+1; num <= MAX_N; num++){
let nextBinary = num.toString(2);
if( getOneCountFromBinary(nextBinary) === binaryOneCount ) {
answer = num;
break;
}
}
return answer;
}
function getOneCountFromBinary(binary){
let count = 0;
for(let char of binary) {
if( char === '1' ) count +=1;
}
return count;
}