N

(백준 c++)11723 집합 본문

백준 알고리즘

(백준 c++)11723 집합

naeunchan 2021. 2. 23. 20:33
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