https://programmers.co.kr/learn/courses/30/lessons/12911
function solution(n) {
var nOneCount = findOneCount(n);
var answer = 0;
var nextN = n + 1;
while (true) {
if (findOneCount(nextN) === nOneCount) {
answer = nextN;
break;
} else {
nextN++;
}
}
return answer;
}
function findOneCount(n) {
var nBin = n.toString(2).split('');
var nBinOneCount = 0;
while (true) {
var index = nBin.indexOf('1');
if (index === -1) {
break;
} else {
nBin.splice(index, 1);
nBinOneCount++;
}
}
return nBinOneCount;
}
답은 n을 이진수로 표현해서 1의 갯수와 n보다 큰 가장 작은 자연수중 이진수로 표현해서 1의 갯수가 같은 n보다 큰 가장 자연수를 구하는 것이다.
nBinCount
= 2진수로 표현해서 1의 갯수
nextN = n
다음 수
즉, n + 1
부터 시작해서 nBinCount
를 세어서 같으면 답을 출력하면된다.
n.toString(2)
: 이함수는 n을 이진수로 바꾼다. 2를 4나 8로 바꿀수도 있다.. 대박이다. 좀 사기적인 스킬이다.n.splice(index, 1)
: n
이라는 배열에서 index
부분을 제거한다. 원하는 원소를 제거하려면 indexOf('value')
를 통해서 index
값을 알아내야한다.