def count_one(x):
cnt = 0
while x:
x &= x - 1
cnt += 1
return cnt
이항 비트 연산을 이용한 log(n) 연산.
원리는 간단하게 직접 해보면 안다.
ex = 7
좌항(10진법) => 우항(2진법)
while loop1
7 => 111
7 - 1 => 110
7 & 6 = 11
while loop2
3 => 11
3 - 1 => 10
3 & 2 = 1
while loop3
1 => 1
1 - 1 => 0
1 & 0 = 0(condition end)
3번의 연산=> 1의 개수가 세개이다.
'파이썬 > 파이썬 문법(심화)' 카테고리의 다른 글
[WIP]대한민국에서 가장 자세한 f-string 가이드 (0) | 2023.05.26 |
---|---|
[잡지식] 문자열 연결에 "+"를 사용하지 마세요! (0) | 2023.02.19 |
(Python) 약수 구하기.(시간 복잡도:$O(\sqrt{n})$) (0) | 2022.12.26 |
2차원 리스트를 회전시키기 (0) | 2022.10.25 |
0으로 초기화된 2-차원 리스트 생성하기. (0) | 2022.06.28 |