Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 이진수 1비트 개수 세기 – 해밍 웨이트(Hamming Weight) 구현 방법

부호 없는 정수 n이 주어졌을 때, 이 숫자를 이진수로 표현했을 때 포함된 1의 개수를 구하는 문제를 생각해 봅시다. 이 값은 흔히 해밍 웨이트(Hamming Weight)라고 불리며, 비트 연산 알고리즘 문제에서 자주 등장하는 개념입니다.

예를 들어 이진수가 000000101101이라면, 1이 총 4개 있으므로 결과는 4가 됩니다.

문제 해결 접근 방법

이 문제는 다음 단계를 통해 간단하게 해결할 수 있습니다.

  • 주어진 숫자를 이진수 문자열로 변환합니다.
  • 카운터 변수를 초기화합니다 (count = 0).
  • 이진수 문자열의 각 문자를 하나씩 순회하면서, 해당 문자가 '1'이면 카운트를 1 증가시킵니다.
  • 순회가 끝나면 카운트 값을 반환합니다.

구현 예제

아래 코드는 위 알고리즘을 파이썬 클래스로 구현한 것입니다. 입력 문자열은 int(num, 2)를 사용해 정수로 변환한 후 함수에 전달됩니다.

class Solution(object):
    def hammingWeight(self, n):
        """
        :type n: int
        :rtype: int
        """
        binary_str = str(bin(n))
        one_count = 0
        for i in binary_str:
            if i == "1":
                one_count += 1
        return one_count

num = "000000101101"
ob1 = Solution()
print(ob1.hammingWeight(int(num, 2)))

입력

num = "000000101101"

출력

4

추가 팁: 파이썬 내장 함수 활용하기

파이썬에서는 위 로직을 한 줄로 더 간결하게 작성할 수도 있습니다. 파이썬 3.10 이상에서는 int.bit_count() 메서드를 바로 사용할 수 있습니다.

# 파이썬 3.10 이상
n = 0b000000101101
print(n.bit_count())  # 출력: 4

# 하위 버전에서 사용 가능한 방법
n = 0b000000101101
print(bin(n).count("1"))  # 출력: 4

bin(n).count("1") 방식은 내장 함수만으로 1비트를 빠르게 셀 수 있어 실무에서도 널리 활용됩니다. 다만 면접이나 코딩 테스트에서는 직접 순회하며 세는 방식을 구현해 보는 것이 알고리즘 이해에 더 도움이 됩니다.