Approach
전형적인 비트마스킹 문제이다.
Add : t의 i번째 비트를 키고 싶은 경우 ( t |= (1 << i ))
remove : t의 i번째 비트를 끄고 싶은 경우 (t &= ~(i << i))
check : t의 i번쨰 비트가 켜져있는지 확인 (t & (1 << i)) : 0이 나오면 켜져있지 않고, 나머지는 켜져있는 상태
toggle : t의 i번째 비트를 토글링 (t ^= ~(1 << i))
참고 : https://m.blog.naver.com/jh20s/221150706030
Code
#include <bits/stdc++.h>
#define fastio ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0)
using namespace std;
typedef long long ll;
int main(void){
fastio;
int t;
cin >> t;
ll bitmask = 0LL;
while(t--){
string v;
cin >> v;
if(v == "add"){
int t;
cin >> t;
bitmask |= 1 << (t - 1);
}
else if(v == "remove"){
int t;
cin >> t;
bitmask &= ~(1 << (t - 1));
}
else if(v == "check"){
int t;
cin >> t;
if(bitmask & (1 << (t - 1))){
cout << 1 << "\n";
}
else cout << 0 << "\n";
}
else if(v == "toggle"){
int t;
cin >> t;
bitmask ^= (1 << (t - 1));
}
else if(v == "all"){
bitmask = (1 << 20) - 1;
}
else bitmask = 0;
}
return 0;
}