점프와 순간 이동

hyuri·2023년 10월 13일
0

코딩테스트 연습

목록 보기
60/70

내가 작성한 답

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을 모두 제외시킨 다음 길이를 측정했다.

시간 복잡도가 모두 동일하기에 가독성과 효율성을 고려하여 사용하면 될 듯 하다.

profile
개발자가 되고 싶은 지망생

0개의 댓글