https://leetcode.com/problems/number-of-1-bits/description/
비트 연산 문제에서 가장 자주 등장하는 문제 중 하나가 191. Number of 1 Bits다.
정수의 이진 표현에서 1의 개수를 세는 문제로 단순해 보이지만,
풀이 방식에 따라 효율성과 구현 난이도가 크게 달라진다.
이 글에서는 가장 통상적으로 쓰이는 두 가지 방법을 비교해 본다.
주어진 정수 n의 이진수 표현에서 1 비트의 개수(Hamming Weight) 를 구하라.
가장 직관적이면서도 초보자가 바로 떠올릴 수 있는 풀이이다.
n의 모든 비트(0~31)를 확인하여 1인지 검사한다.
public int HammingWeight(int n)
{
int count = 0;
for (int i = 0; i < 32; i++)
{
count += (int)(n & 1);
n >>= 1;
}
return count;
}
가장 오른쪽에 있는 1비트를 제거하며 반복하는 방식이다.

n & (n - 1) 을 하면
👉 n에서 가장 오른쪽에 있는 1이 제거된다.
즉, 1이 3개이면 3번, 1이 10개이면 10번만 루프를 돈다.
public int HammingWeight(int n)
{
int count = 0;
while (n != 0)
{
n &= (n - 1);
count++;
}
return count;
}
비트 연산 문제에 자주 등장하므로 반드시 두 방식 모두 이해해두면 좋다.
| LeetCode 136. SingleNumber — XOR 연산 응용 (0) | 2025.12.11 |
|---|---|
| LeetCode 190. Reverse Bits — 두 가지 풀이 비교하기 (0) | 2025.12.11 |
| 퀵정렬 원리 아주 쉽게 이해하기(Quick Sort) (0) | 2024.11.08 |
| 백준 1316 - 그룹 단어 체커 (파이썬) (0) | 2021.01.16 |
| 백준 5622 - 다이얼 (파이썬) (0) | 2021.01.13 |