문제 링크 : 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 |