문제 정보
- Leet Code 문제 링크
- 난이도 : Easy
해결 방법
해결 하는 방법 자체는 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 이라는 말이 문자열이라서 그런 것으로 보입니다.
참고 자료
- LeetCode Top 100 Problem Selection
- MDN - JavaScript > JavaScript 안내서 > 숫자와 날짜
- 2진수의 수와 음수 표현법 [1의 보수와 2의 보수]
'코딩 테스트 연습' 카테고리의 다른 글
[Leet Code Top 100] #268. Missing Number (0) | 2022.01.13 |
---|---|
[Leet Code Top 100] #338. Counting Bits (0) | 2022.01.13 |
[Leet Code Top 100] #11. Container With Most Water (0) | 2022.01.11 |
[Leet Code Top 100] #15. 3Sum (0) | 2022.01.10 |
[Leet Code Top 100] #33. Search in Rotated Sorted Array (0) | 2022.01.09 |