[BOJ_17419] 비트가 넘쳐흘러(python)

그냥·2024년 6월 7일
0

알고리즘

목록 보기
5/23

https://www.acmicpc.net/problem/17419

문제


코드

n = input()
k = input()
print(k.count('1'))

Idea 1

N자리 이진수 K
K = K - ( K & ((~K)+1) )

 K = 10110 (10진수 22)
~K = 01001 (비트를 반전)

~K + 1 (2의 보수): 반전된 비트에 1을 더하기
~K + 1 = 01001 + 1 = 01010

K & (~K + 1): K와 (~K + 1) 비트 AND 연산
K & (~K + 1) = 10110 & 01010 = 00010
-> K의 가장 오른쪽에 있는 1의 위치를 찾는 연산 

K-(K&((~K)+1)) = 10110 - 00010 = 10100
-> 최하위 1비트 제거

0개의 댓글