function solution(n)
{
let ans = 0;
while(n !== 0){
if (n % 2 === 0){
n /= 2;
} else {
n--;
ans++;
}
}
return ans;
}
function solution(n){
if(n === 1) return 1;
const nArr = Array.from(n.toString(2));
return nArr.reduce((a,b)=>(+a)+(+b));
}
function solution(n)
{
return n.toString(2).replace(/0/g,"").length
}
시간 복잡도는 모두 동일함 (O(log2(n)))
나는 while문을 통해서 짝수 일 경우 계속 나누고 짝수가 아닐 경우 n에 -1을 하여 ans를 +1로 하고 짝수로 만들었다.
두 번째는 2진수로 만들어서 1의 개수를 세고 있다.
차이라면 2진수로 변환한거랑 2로 나누고 홀수 일 때 +1을 하는 차이라서 비슷하다.
세 번째는 2진수로 변환하고 0을 모두 제외시킨 다음 길이를 측정했다.
시간 복잡도가 모두 동일하기에 가독성과 효율성을 고려하여 사용하면 될 듯 하다.