집합 - 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 | (1 << x)); } else if (order == "remove") { cin >> x; x--; s = (s&(~(1 << x))); } else if (order == "check") { cin >> x; x--; int num = (s&(1 << x)); if (!num) cout << 0 << '\n'; else cout << 1 << '\n'; } else if (order == "toggle") { cin >> x; x--; s = s ^ (1 << x); } else if (order == "all") { s = (1 << 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 |
---|