[내가 생각한 알고리즘]
10진수n을 2진수로 변경 -> 2진수n의 1의개수 카운팅(nCount) -> 무한반복문을 통하여 n을 1씩 증가하여 앞과 같은 과정을 통하여 1의 개수가 같을 시 break;
[나의 코드]
const solution = (n) =>{
let answer = 0;
let boolean = true;
let n2 = n.toString(2);
let nCount = 0;
for(let i=0; i<n2.length; i++){
if(n2[i] === '1') nCount++;
}
while(boolean){
n++;
let mCount =0;
n.toString(2).split('').map((num)=>{if(num === '1')mCount++;})
if(mCount === nCount) boolean=false;
}
return n;
}
[결과]
실행 테스트에서는 다 성공했으나 효율성 테스트에서 다 실패했다. 아무래도 무한반복문과 일일이 반복작업이라 이러한 결과가 나오지 않았나 예상된다.
[수정]
코드를 이리저리 수정하다 처음으로 돌아와 실행하기를 해봤더니 됐다... 인터넷 상태가 문제였나??
[다른 분의 문제풀이]
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);
}
어떻게 이런 생각을 할 수 있지 감탄밖에 안나온다 나도 저러한 발상을 할 수 있도록 더 성장하자 화이팅 !!