https://www.acmicpc.net/problem/11723
메모리를 4MB만 주어지기 때문에 비트마스킹으로 풀어야 하는 문제이다. 비트마스킹의 개념을 알고 싶다면 꼭 풀어야할 문제.
코드
#include <iostream>
#include <string>
using namespace std;
int M, num, BIT=0;
string s;
int main()
{
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>M;
while(M--){
cin>>s;
//비스마스킹에서 1<<num은 이진수에서 num번째를 1로 바꾼다는 의미
if(s=="add"){
cin>>num;
//num번째를 1로 바꾼다는 의미
BIT|=(1<<num);
}else if(s=="remove"){
cin>>num;
//~(1<<num)은 num번째는 0 나머지는 1인 이진수
BIT&=~(1<<num);
}else if(s=="check"){
cin>>num;
if(BIT&(1<<num)){
cout<<1<<'\n';
}else{
cout<<0<<'\n';
}
}else if(s=="toggle"){
cin>>num;
//^=(1<<num)을 해주면 num번째가 1이면 0으로 0이면 1로 바꿔준다.
BIT^=(1<<num);
}else if(s=="all"){
//(1<<num)-1은 1이 num개인 이진수를 만든다는 뜻
BIT=(1<<21)-1;
}else if(s=="empty"){
BIT=0;
}
}
}
'백준 > Bit Masking' 카테고리의 다른 글
[BOJ] 2098 외판원순회 C++ (0) | 2021.08.15 |
---|---|
[BOJ] 14391 종이조각 C++ (0) | 2021.08.14 |
[BOJ] 1062 가르침 C++ (0) | 2021.08.14 |
[BOJ] 13701 중복제거 C++ (0) | 2021.08.14 |