Integer.bitCount(n), Integer.toBinaryString(n)

드코미·2026년 6월 20일
post-thumbnail

Integer.bitCount(n) — 1의 개수 세는 함수

정수 n2진수(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의 개수"를 직접 비교해야 하는 문제(예: 프로그래머스의 "다음 큰 숫자" 문제)에서 자주 등장하는 메서드입니다.

profile
할 수 있다!!!

0개의 댓글