ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] #11723: 집합
    Programming/백준 (c++) 2022. 9. 14. 01:27

    문제

    비어있는 공집합 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 연산이 주어질때마다, 결과를 출력한다.

    예제 입력 1 

    26
    add 1
    add 2
    check 1
    check 2
    check 3
    remove 2
    check 1
    check 2
    toggle 3
    check 1
    check 2
    check 3
    check 4
    all
    check 10
    check 20
    toggle 10
    remove 20
    check 10
    check 20
    empty
    check 1
    toggle 1
    check 1
    toggle 1
    check 1
    

    예제 출력 1 

    1
    1
    0
    1
    0
    1
    0
    1
    0
    1
    1
    0
    0
    0
    1
    0

     

    코드

    #include <iostream>
    #include <set>
    
    using namespace std;
    
    int main()
    {
        ios::sync_with_stdio(0); cin.tie(0); //시간 빨라짐
        
        int n,x; //n:입력 개수 x:삽입할 수
        x>=0 && x<=20;
        string cmd; //명령
        set<int> set,all;
        
        //입력
        cin>>n;
        while(n--){
            cin>>cmd;
            if(cmd=="add"){
                cin>>x;
                set.insert(x);
            }
            if(cmd=="remove"){
                cin>>x;
                set.erase(x);
            }
            if(cmd=="check"){
                cin>>x;
                if(set.find(x)==set.end()){ //x가 없으면
                    cout<<"0"<<"\n"; //0을 출력
                }
                else{ //x가 있으면
                    cout<<"1"<<"\n"; //1을 출력
                }
            }
            if(cmd=="toggle"){
                cin>>x;
                if(set.find(x)==set.end()){ //x가 없으면
                    set.insert(x); //x 추가
                }
                else { //x 있으면
                    set.erase(x); //삭제
                }
            }
            if(cmd=="all"){
                for(int i=1;i<=21;i++){ //1부터 20이 있는 set 만들기
                    all.insert(i);
                }
                set=all; //set을 all로 대체
            }
            if(cmd=="empty"){
                set.clear();
            }
        }
        
        return 0;
    }
Designed by Tistory.