11723 집합 cpp

    https://www.acmicpc.net/problem/11723

     

    11723번: 집합

    첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.

    www.acmicpc.net

     

     

     

     

     

     

     

     

     

    문제 접근

    비트마스킹

    비트 마스킹 C++

     

    비트 마스킹 C++

    연산자의 종류 & AND연산자. 두 값이 모두 1이라면 1의 출력값을 가진다. | OR연산자. 두 값중 하나라도 1이라면 1의 출력값을 가진다. ~ NOT연산자. 0은 1로, 1은 0으로 바꾼다. ^ XOR연산자. 두 값이 서

    portable-paper.tistory.com

     

     

     

     

     

     

     

     

    코드

    #include <iostream>
    #include <cstring>
     
    using namespace std;
    
    int main()
    {
        ios_base::sync_with_stdio(0);
        cin.tie(0);
        
        unsigned int S = 0;
        int M, x;
        cin>>M;
        string str = "";
        
        for(int i=0; i<M; i++)
        {
            cin>>str;
            if(str=="add")
            {
                cin>>x;
                S |= (1<<x);
            }
            else if(str=="remove")
            {
                cin>>x;
                S &= ~(1<<x);
            }   
            else if(str== "check")
            {
                cin>>x;
                if(S&(1<<x))
                    cout<<1<<'\n';
                else
                    cout<<0<<'\n';
            }
            else if(str=="toggle")
            {
                cin>>x;
                S ^= (1<<x);
            }
            else if(str=="all")
            {
                S |= (1<<21)-1;
            }
            
            else if(str=="empty")
            {
                S = 0;
            }
        }
        
        return 0;
    
    }
    2024 700

    '백준 > 문제풀이_C++' 카테고리의 다른 글

    10816 숫자 카드2 C++  (0) 2023.02.10
    1547 공 C++  (0) 2023.01.26
    2577 숫자의 개수 C++  (0) 2022.12.17
    2908 상수 C++  (0) 2022.12.17
    2920 음계 C++  (0) 2022.12.17

    댓글