250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(백준 c++)11723 집합 본문
728x90
반응형
문제
비어있는 공집합 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 연산이 주어질때마다, 결과를 출력한다.
vector는 검색 속도가 느리기 때문에 set을 사용.
또한 입출력으로 인해 시간 초과가 뜨기 때문에 동기화를 하지 않고,
endl 대신 "\n"로 해주면 된다.
#include <iostream>
#include <set>
#include <string>
using namespace std;
int main(void){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
set<int> S;
set<int> allS = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
cin >> n;
for(int i = 0; i < n; i++){
string s;
int num;
cin >> s;
if(s != "all" && s != "empty"){
cin >> num;
}
if(s == "add"){
if(S.find(num) == S.end()){
S.insert(num);
}
}
else if(s == "remove"){
if(S.find(num) != S.end()){
S.erase(num);
}
}
else if(s == "check"){
if(S.find(num) != S.end()){
cout << 1 << "\n";
}
else{
cout << 0 << "\n";
}
}
else if(s == "toggle"){
if(S.find(num) != S.end()){
S.erase(num);
}
else{
S.insert(num);
}
}
else if(s == "all"){
S = allS;
}
else if(s == "empty"){
S.clear();
}
}
return 0;
}
728x90
반응형
'백준 알고리즘' 카테고리의 다른 글
(백준 c++)1976 여행 가자 (0) | 2021.02.25 |
---|---|
(백준 c++)2638 치즈 (0) | 2021.02.24 |
(백준 c++)17298 오큰수 (0) | 2021.02.23 |
(백준 c++)17135 캐슬 디펜스 (0) | 2021.02.23 |
(백준 c++)2615 오목 (0) | 2021.02.22 |