function solution(n) {
let num = n + 1;
const oneInBinaryN = [...n.toString(2)].filter((str) => str !== "0").length;
while(true){
const oneInBinaryNum = [...num.toString(2)].filter((str) => str !== "0").length;
if(oneInBinaryN === oneInBinaryNum){
break;
}
num += 1;
}
return num;
}
방법은 다음과 같다.
toString(2)
을 통해 2진수로 변환한 후, 이를 배열화한다.
1
의 개수가 일치하는 것이 관건이므로, 0
인 것을 제외한 배열의 길이를 구한다.
n
으로 주어진 숫자가 판별의 기준이 되고,
조건을 만족하는 가장 작은 숫자를 구하기 위해서는 1
씩 증가시키면서 연산을 진행하면 된다.
조건을 만족하면 반복을 종료하고, 해당 num
을 출력한다.
function solution(n,a=n+1) {
return n.toString(2).match(/1/g).length == a.toString(2).match(/1/g).length ? a : solution(n,a+1);
}
정규식을 활용하신 분이 계셨다.
글로벌하게 1
을 탐색하여 얻은 배열의 길이를 활용하셨다.