본문 바로가기

Algorithm/Bitmask

BOJ-11723)집합

집합 - boj.kr/11723 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <string>
using namespace std;
 
int main(void)
{
    ios_base::sync_with_stdio(false);
    cin.tie(false);
 
    int m, s = 0;
    cin >> m;
 
    string order;  
    int x;
    for (int i = 0; i < m; ++i) {
        cin >> order;
 
        if (order == "add") {
            cin >> x; x--;
            s = (s | (<< x));
        }
    
        else if (order == "remove") {
            cin >> x; x--;
            s = (s&(~(<< x)));
        }
        else if (order == "check") {
            cin >> x; x--;
            int num = (s&(<< x));
            if (!num) cout << << '\n';
            else cout << << '\n';
 
        }
        else if (order == "toggle") {
            cin >> x; x--;
            s = s ^ (<< x);
        }
        else if (order == "all") {
            s = (<< 20- 1;
        }
        else if (order == "empty") {
            s = 0;
        }
    }
 
 
    return 0;
}
cs

x--를 안쓰고 했더니, 마지막 비트 20을 검사할때 오류가 난다. (1<<20) -1 은 20번째 비트(처음이 0이라고 한다면)는 꺼진 상태이기 때문이다.

그래서 맨 처음 비트를 '0'(집합의 원소 '0')으로 잡는게 아니라, '1'(집합의 원소 '1')로 잡는게 더 적절함. 

'Algorithm > Bitmask' 카테고리의 다른 글

Bitmask(비트마스크) 설명  (0) 2018.07.18