비트마스크 문제였다. 비트마스크가 뭔지는 모르겠는데 이 문제는 특정 범위의 값을 0과 1로 만드는 간단한 문제였다. 비슷한 유형의 문제를 많이 접해봤는데 비트마스크에 대해서 다루는 문제가 많은 것 같다. 스터디 끝나면 이 주제도 정리해봐야겠다.
문제 자체는 쉬웠으나 입력이 많기 때문에 입출력 이슈가 생겼고 첫 시도에서는 시간초과가 났다. 두번째 시도에서는 ios::sync_with_stdio(0)
와 cin.tie(0)
을 붙여줘서 시간초과 문제를 해결했다.
#include <iostream>
using namespace std;
int bit[21];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n;
string s;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> s;
if (s == "add")
{
int x;
cin >> x;
if (bit[x] == 0)
bit[x]++;
}
if (s == "remove")
{
int x;
cin >> x;
if (bit[x] == 1)
bit[x]--;
}
if (s == "check")
{
int x;
cin >> x;
if (bit[x] == 1)
cout << "1" << "\n";
else
cout << "0" << "\n";
}
if (s == "toggle")
{
int x;
cin >> x;
if (bit[x] == 1)
bit[x] = 0;
else
bit[x] = 1;
}
if (s == "all")
{
for (int j = 0; j < 21; j++)
{
bit[j] = 1;
}
}
if (s == "empty")
{
for (int j = 0; j < 21; j++)
{
bit[j] = 0;
}
}
}
}