[Easy] 191. Number of 1 Bits

문제

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