알고리즘풀이

LeetCode: Number of 1 Bits

batterflyyin 2021. 3. 20. 09:32

문제풀이

  • unsigned Int가 주어졌을 때 1 비트의 개수를 구하라. (정수에서 1비트의 개수를, 해밍 웨이트(Hamming weight)라고 불린다.)

문제 풀이

  • 최대 32비트까지 검사하면 되므로 32번 순회한다.
  • 첫번째 비트를 1과 AND 비트 연산하여 1이 나오는지 확인하여 합계를 계산해준다.
  • 한번 순회가 끝나면 다음 비트를 검사해야 하므로, ">>" 연산을 사용하여 오른쪽으로 1 비트 옮긴다.
func hammingWeight(_ n: Int) -> Int {
    var num = n
    var total = 0
    for _ in 0..<32 {
        if num & 1 == 1 {
            total += 1
        }
        num = num >> 1
    }
    return total
}

print(hammingWeight(3)) // 2
print(hammingWeight(256)) // 1
print(hammingWeight(-3)) // 31