KDHzoot's Github

Code for study, project, etc

자세히보기

알고리즘/PS

[백준 17419] 비트가 넘쳐흘러

kdhzoot 2020. 8. 3. 16:48

문제 링크 : https://www.acmicpc.net/problem/17419

 

17419번: 비트가 넘쳐흘러

🎶 DJ욱제는 비트에 몸을 맡기는 중이다. 🎶 DJ욱제는 비트에 심취한 나머지, 비트를 비틀어 제껴버리는 문제를 내 버렸다! N자리 이진수 K가 주어진다. K가 0이 아닐 때까지 아래의 연산을 적용�

www.acmicpc.net

K = K-(K&((~K)+1))

 

문제에 나오는 연산을

 

10110을 대상으로 한번 실행해보자

 

~K 는 01001

 

여기에 1을 더하면

 

01010

 

기존의 K와 &연산을 하면 00010

 

기존에 K에서 이를 빼면 10100

 


 

연산을 여러번 반복해보면 알겠지만

 

위 식은 K라는 이진수에서 마지막 1을 빼는 연산이다

 

팬윅트리에서 사용되기도 한다.

 


 

결국 입력에서 1의 개수를 세는 문제이다.

 

#include <iostream>
using namespace std;

int main(void) {
	int n, res = 0;
	cin >> n;
	for (int i = 0; i < n; i++) {
		int a;
		scanf("%1d", &a);
		if (a == 1) {
			res++;
		}
	}
	cout << res << endl;

	return 0;
}

'알고리즘 > PS' 카테고리의 다른 글

[백준 17608] 막대기  (0) 2020.08.12
[백준 1085] 직사각형에서 탈출  (0) 2020.08.04
[백준 2193] 이친수  (0) 2020.08.01
[백준 14697] 방 배정하기  (0) 2020.08.01
[백준 17404] RGB거리 2  (0) 2020.07.29