
정수 n을 2진수(binary)로 변환했을 때, 1이 몇 개 있는지 세어주는 메서드입니다.
Integer.bitCount(7); // 7 = 111(2) → 1이 3개 → 결과: 3
Integer.bitCount(8); // 8 = 1000(2) → 1이 1개 → 결과: 1
Integer.bitCount(5); // 5 = 101(2) → 1이 2개 → 결과: 2
Integer.bitCount(0); // 0 = 0(2) → 1이 0개 → 결과: 0
정수를 2진수로 직접 바꿔서 0과 1을 세려면 보통 이런 코드를 짜야 해요.
int count = 0;
int n = 7;
while (n > 0) {
count += n & 1; // 마지막 비트가 1인지 확인
n >>= 1; // 오른쪽으로 한 칸 밀기
}
System.out.println(count); // 3
비트 연산(&, >>)을 직접 써야 해서 좀 번거롭죠. Integer.bitCount()는 이걸 한 줄로 끝내주는 내장 메서드입니다.
int count = Integer.bitCount(7); // 3
코딩테스트에서는 보통 이런 상황에 등장해요.
1. 두 수의 2진수 표현에서 1의 개수가 같은지 비교
if (Integer.bitCount(a) == Integer.bitCount(b)) {
// 1의 개수가 같음
}
2. 비트마스크(bitmask) 활용 문제 — 부분집합/조합 탐색
// n개의 원소 중 부분집합을 비트로 표현할 때
for (int mask = 0; mask < (1 << n); mask++) {
if (Integer.bitCount(mask) == k) {
// 정확히 k개가 선택된 부분집합
}
}
3. 2의 거듭제곱인지 확인
// 2의 거듭제곱은 2진수로 1이 정확히 1개만 있음 (1, 10, 100, 1000...)
boolean isPowerOfTwo = Integer.bitCount(n) == 1;
System.out.println(Integer.toBinaryString(7)); // "111"
System.out.println(Integer.bitCount(7)); // 3
System.out.println(Integer.toBinaryString(13)); // "1101"
System.out.println(Integer.bitCount(13)); // 3
System.out.println(Integer.toBinaryString(16)); // "10000"
System.out.println(Integer.bitCount(16)); // 1
Integer.toBinaryString(n)으로 2진수 문자열을 직접 출력해보면 1의 개수가 맞는지 눈으로 확인할 수 있어요.
| 메서드 | 역할 |
|---|---|
Integer.bitCount(n) | n을 2진수로 봤을 때 1의 개수를 셈 |
Integer.toBinaryString(n) | n을 2진수 문자열로 변환 (확인용으로 같이 쓰면 유용) |
비트마스크를 활용하는 조합/부분집합 탐색 문제나, "2진수로 표현했을 때 1의 개수"를 직접 비교해야 하는 문제(예: 프로그래머스의 "다음 큰 숫자" 문제)에서 자주 등장하는 메서드입니다.