백준 문제풀이/Bitmask

[C++] 백준 문제풀이 (Bitmask) 11723 집합

코딩준우 2023. 5. 28. 00:16

 

 

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

 

11723번: 집합

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

www.acmicpc.net

 

 

#include <bits/stdc++.h>

int S = 0;
int m;
std::string cmd;
int num;

int main()
{
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cin >> m;

    for (int i = 0; i < m; ++i){
        std::cin >> cmd;
        if (cmd == "add"){
            std::cin >> num;

            // 해당비트를 켜는 연산
            S |= (1 << num);
        }
        else if (cmd == "remove"){
            std::cin >> num;
            // 해당비트를 끄는 연산
            S &= ~(1 << num);
        }
        else if (cmd == "check"){
            std::cin >> num;
            // 해당비트가 있으면 != 0 없으면 0
            if (S & (1 << num)){
                std::cout << 1 << "\n";
            }
            else {
                std::cout << 0 << "\n";
            }
        }
        else if (cmd == "toggle"){
            std::cin >> num;
            if (S & (1 << num)){
                S &= ~(1 << num);
            }
            else {
                S |= (1 << num);
            }
        }
        else if (cmd == "all"){
            S = (1 << 21) - 1;
        }
        // cmd == "empty"
        else {
            S = 0;
        }
    }
    return 0;
}