본문 바로가기
Computer/Algorithm

[LeetCode] 191. Number of 1 Bits - Kotlin

by HanDongWook 2025. 3. 2.
반응형
class Solution {
    fun hammingWeight(n: Int): Int {
        var count = 0
        var num = n
        repeat(32) {
            count += num and 1
            num = num shr 1
        }
        return count
    }
}

 

 

hammingWeight 함수는 정수 n의 이진 표현에서 1이 몇 개 있는지(비트가 1인 개수)를 세는 역할을 합니다.

 

코드에서 num and 1을 통해 가장 오른쪽(LSB: Least Significant Bit) 비트가 1인지 0인지를 판단하고, 이후에 shr(오른쪽 시프트) 으로 num을 한 비트씩 오른쪽으로 밀어내면서 다음 비트를 검사합니다.

 

왜 shr을 쓰는가?

1. 가장 오른쪽 비트를 순차적으로 확인하기 위해

count += num and 1num가장 오른쪽 비트(LSB) 가 1인지 0인지 판별하여 count에 더합니다.

이후 num = num shr 1로 비트를 오른쪽으로 하나씩 이동시켜, 다음 비트를 다시 LSB 위치로 가져옵니다.

이런 식으로 32번 반복하면, 모든 비트를 한 번씩 확인하게 됩니다.

 

2. shl(왼쪽 시프트)을 사용할 경우

왼쪽으로 비트를 밀면, 가장 왼쪽 비트(MSB)가 사라져 버립니다.

동시에 오른쪽 끝(LSB)에는 0이 새로 들어오므로, 오른쪽 비트를 검사하는 방식으로는 부적합합니다.

우리가 확인하고 싶은 비트는 오른쪽 LSB부터 차례대로 올라가야 하므로, shr이 적합합니다.

 

결국, 오른쪽에서부터 비트를 확인하며 1의 개수를 세기 위해서는 shr이 적합합니다.

만약 shl을 사용한다면, 비트를 왼쪽으로 밀어내면서 오른쪽에 0을 생성하게 되어 정확한 비트 카운팅 로직이 깨지게 됩니다.

반응형

댓글