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

파이썬 리스트 컴프리헨션으로 세트 비트(Set Bits) 개수 계산하기

세트 비트(Set Bit)란 숫자를 이진수로 표현했을 때 값이 1인 비트를 의미합니다. 이 글에서는 주어진 십진수에 포함된 세트 비트의 개수를 세는 방법을 알아보겠습니다.

# 53을 이진수로 표현하면: 110101
# 세트 비트의 개수는 1의 개수와 같습니다.
# 여기서는 4개입니다.

기본 원리

아래 프로그램에서는 숫자를 이진수로 변환한 뒤 세트 비트를 셉니다. 파이썬의 bin() 함수는 변환 결과 앞에 0b라는 두 글자를 붙이므로, 문자열 슬라이싱 기법으로 이 부분을 제거합니다. 그다음 for 루프를 사용해 각 자릿값이 '1'인 경우 카운트를 하나씩 증가시켜 세트 비트의 개수를 구합니다.

예제

value = 59
# 이진수 값 확인
print(bin(value))
# 앞의 두 문자 제거
bitvalue = bin(value)[2:]
print(bitvalue)
count = 0
for digit in bitvalue:
    if digit == '1':
        count = count + 1
print("Length of set bits: ", count)

출력

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

0b111011
111011
Length of set bits: 5

리스트 컴프리헨션으로 더 간결하게

for 루프 대신 리스트 컴프리헨션을 활용하면 같은 로직을 한 줄로 표현할 수 있어 코드가 훨씬 간결해집니다.

value = 59
bitvalue = bin(value)[2:]
count = sum(1 for digit in bitvalue if digit == '1')
print("Length of set bits: ", count)
# 출력: Length of set bits: 5

또는 조건식을 그대로 합산하는 방식도 가능합니다.

count = sum(digit == '1' for digit in bitvalue)
print("Length of set bits: ", count)
# 출력: Length of set bits: 5

마무리

이처럼 bin() 함수와 슬라이싱, 그리고 리스트 컴프리헨션만 활용하면 별도의 라이브러리 없이도 세트 비트의 개수를 손쉽게 계산할 수 있습니다. 참고로 파이썬 3.10 이상에서는 내장 함수인 int.bit_count()를 사용하면 한 번의 호출로 동일한 결과를 얻을 수 있습니다.