문제
Write a function that takes an unsigned integer and returns the number of '1' bits it has (also known as the Hamming weight).
Note:
- Note that in some languages, such as Java, there is no unsigned integer type. In this case, the input will be given as a signed integer type. It should not affect your implementation, as the integer's internal binary representation is the same, whether it is signed or unsigned.
- In Java, the compiler represents the signed integers using 2's complement notation. Therefore, in Example 3, the input represents the signed integer. -3.
예시
Example 1:
Input: n = 00000000000000000000000000001011
Output: 3
Explanation: The input binary string 00000000000000000000000000001011 has a total of three '1' bits.
Example 2:
Input: n = 00000000000000000000000010000000
Output: 1
Explanation: The input binary string 00000000000000000000000010000000 has a total of one '1' bit.
Example 3:
Input: n = 11111111111111111111111111111101
Output: 31
Explanation: The input binary string 11111111111111111111111111111101 has a total of thirty one '1' bits.
제약조건
Constraints:
- The input must be a binary string of length 32.
풀이 과정
n의 정수가 들어오면 2진수로 바꾸어 1의 개수를 반환하는 문제였다.
- 먼저 1의 개수를 셀 count를 초기화하고 n을 2진수로 바꾼 다음 arr에 배열로 담았다.
- 이진 탐색을 할 index를 start, end를 초기화 해준다. 이때, length가 1이면 end가 0이 되어 반복문 실행이 불가능하여 예외 처리를 해주었다.
- start < end일 때까지 반복문을 돈다.
- arr[start]가 1이면 count가 증가한다.
- arr[end]가 1이면 count가 증가한다.
- 이진 탐색 index들을 각각 증가, 감소 시킨다.
- start와 end의 값이 같을 때 숫자 1이 들어올 수 있기 때문에, 그 부분도 처리해주었다.
- 마지막으로 1의 개수를 센 count 변수를 반환한다.
풀이 코드
/**
* @param {number} n - a positive integer
* @return {number}
*/
var hammingWeight = function(n) {
let count = 0;
let arr = n.toString(2).split("");
let start = 0;
let end = arr.length - 1;
if(arr.length === 1) end = 1;
while(start < end){
if(arr[start] === '1'){
count++;
}
if(arr[end] === '1') {
count++;
}
start++;
end--;
}
if(start === end){
if(arr[start] === '1'){
count++;
}
}
return count;
};
'leetCode' 카테고리의 다른 글
[Easy] 190. Reverse Bits (0) | 2022.05.25 |
---|---|
[Easy] 231. Power of Two (3) | 2022.05.24 |
[Medium] 120. Triangle (0) | 2022.05.23 |
[Medium] 198. House Robber (0) | 2022.05.23 |
[Easy] 70. Climbing Stairs (3) | 2022.05.23 |
Comment