백준 문제풀이/Bitmask
[C++] 백준 문제풀이 (Bitmask) 11723 집합
코딩준우
2023. 5. 28. 00:16
https://www.acmicpc.net/problem/11723
11723번: 집합
첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.
www.acmicpc.net
#include <bits/stdc++.h>
int S = 0;
int m;
std::string cmd;
int num;
int main()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> m;
for (int i = 0; i < m; ++i){
std::cin >> cmd;
if (cmd == "add"){
std::cin >> num;
// 해당비트를 켜는 연산
S |= (1 << num);
}
else if (cmd == "remove"){
std::cin >> num;
// 해당비트를 끄는 연산
S &= ~(1 << num);
}
else if (cmd == "check"){
std::cin >> num;
// 해당비트가 있으면 != 0 없으면 0
if (S & (1 << num)){
std::cout << 1 << "\n";
}
else {
std::cout << 0 << "\n";
}
}
else if (cmd == "toggle"){
std::cin >> num;
if (S & (1 << num)){
S &= ~(1 << num);
}
else {
S |= (1 << num);
}
}
else if (cmd == "all"){
S = (1 << 21) - 1;
}
// cmd == "empty"
else {
S = 0;
}
}
return 0;
}