반응형
문제
비어있는 공집합 S가 주어졌을 때, 아래 연산을 수행하는 프로그램을 작성하시오.
- add x: S에 x를 추가한다. (1 ≤ x ≤ 20) S에 x가 이미 있는 경우에는 연산을 무시한다.
- remove x: S에서 x를 제거한다. (1 ≤ x ≤ 20) S에 x가 없는 경우에는 연산을 무시한다.
- check x: S에 x가 있으면 1을, 없으면 0을 출력한다. (1 ≤ x ≤ 20)
- toggle x: S에 x가 있으면 x를 제거하고, 없으면 x를 추가한다. (1 ≤ x ≤ 20)
- all: S를 {1, 2, ..., 20} 으로 바꾼다.
- empty: S를 공집합으로 바꾼다.
입력
첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다.
둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.
출력
check 연산이 주어질때마다, 결과를 출력한다.
비트마스킹 문제
cin.tie 사용 시 scanf,printf랑 cin,cout 섞어 쓰면 에러
#include <iostream>
#include <vector>
#include<string.h>
#include<queue>
#include <string>
#include<stack>
#include<cmath>
#include <map>
#include<algorithm>
using namespace std;
bool bit[21];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int N;
cin >> N;
for (int i = 0; i < N; i++)
{
string str;
int num;
cin >> str;
if (str == "add")
{
cin >> num;
bit[num] = true;
}
else if (str == "remove")
{
cin >> num;
bit[num] = false;
}
else if (str == "check")
{
cin >> num;
if (bit[num])
{
cout << 1 << "\n";
}
else
{
cout << 0 << "\n";;
}
}
else if (str == "toggle")
{
cin >> num;
if (bit[num])
{
bit[num] = false;
}
else
{
bit[num] = true;
}
}
else if (str == "all")
{
memset(bit, 1, sizeof(bit));
}
else if (str == "empty")
{
memset(bit, 0, sizeof(bit));
}
}
}
반응형
'Algorithm' 카테고리의 다른 글
[동적 계획법과 최단거리 역추적 단계] 백준 14003번 가장 긴 증가하는 부분 수열 5 (0) | 2020.10.06 |
---|---|
[동적 계획법 3 단계] 백준 2098번 외판원 순회 (0) | 2020.10.05 |
[동적 계획법 3 단계] 백준 2482번 색상환 (0) | 2020.10.05 |
[동적 계획법 3 단계] 백준 17404번 RGB거리 2 (0) | 2020.10.05 |
[최단경로 단계] 백준 10217번 KCM Travel (0) | 2020.10.04 |