코딩 테스트 연습

[Leet Code Top 100] #191. Number of 1 Bits

쫑인스 2022. 1. 13. 02:53

문제 정보

 

해결 방법

해결 하는 방법 자체는 n 이 0이 아닐 때까지 >>>  bitwise 연산을 해주면서 1의 개수를 셌습니다. 문제는 이진법의 수를 표현하는 방법이었는데 Leet Code 에 나온 입력과는 다르게 자바스크립트 (를 포함한 다른 언어) 에서 사용하는 표현 법으로 앞에 '0b'를 붙여 주었습니다. 

 

소스 코드

// Leet Code
// #191. Number of 1 Bits
// Success
// Runtime: 130 ms, faster than 13.39% of JavaScript online submissions for Number of 1 Bits.
// Memory Usage: 40.3 MB, less than 54.56% of JavaScript online submissions for Number of 1 Bits.

function main(){
    // Input // Output
    //n = 0b00000000000000000000000000001011; // 3
    n = 0b11111111111111111111111111111101; //31

    console.log(hammingWeight(n));
}

/**
 * @param {number} n - a positive integer
 * @return {number}
 */
var hammingWeight = function(n) {
    let result = 0;
    let nCopy = n;

    while(0 !== nCopy){
        //console.log(`${nCopy}`);
        if(nCopy & 1) result++;
        nCopy = nCopy >>> 1;
    }

    return result;
};

 

더 알아본 내용

var hammingWeightPractice = function() {
    let result = 0;

    let number = 4294967293;
    let strNumber = "4294967293";
    //console.log(number.toString(2)); // 11111111111111111111111111111101
    //console.log(strNumber.toString(2)); // 4294967293

    let nCopy = number.toString(2);

    console.log(`${nCopy}`);
    while(0 != nCopy){
        console.log(`${nCopy}`);
        if(nCopy & 1) result++;
        nCopy = nCopy >>> 1;
    }

    return result; // 0
};

궁금해서 더 찾아봤는데 toString(2) 메소드를 통해서 변환된 이진법 수는 출력은 잘 되지만 연산이 되지 않았습니다. string 이라는 말이 문자열이라서 그런 것으로 보입니다.

 

참고 자료