오답노트

[비트마스크] BOJ 11723 집합 본문

C,C++/코딩테스트

[비트마스크] BOJ 11723 집합

권멋져 2022. 5. 8. 16:49
https://www.acmicpc.net/problem/11723
 

11723번: 집합

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

www.acmicpc.net

- 문제 파악

공집합 S가 있고 문자열과 정수가 입력되면 그에 맞는 기능을 실행하고 check가 입력되면 같이 입력된 정수의 상태를 출력한다.

 

- 정답

비트마스크 문제이지만 배열로 풀었다.

#include "bits/stdc++.h"

using namespace std;

int arr[22];
int ans = 0x7ffffff;

int main()
{
    cin.tie(NULL);
    ios::sync_with_stdio(false);

    int n;
    cin >> n;

    while (n--)
    {
        int Num;
        string cmd;
        cin >> cmd;

        if (cmd == "add")
        {
            cin >> Num;
            arr[Num] = 1;
        }
        else if (cmd == "check")
        {
            cin >> Num;
            cout << arr[Num] << "\n";
        }
        else if (cmd == "remove")
        {
            cin >> Num;
            arr[Num] = 0;
        }
        else if (cmd == "toggle")
        {
            cin >> Num;

            if (arr[Num])
                arr[Num] = 0;
            else
                arr[Num] = 1;

        }
        else if (cmd == "all")
        {
            for (int i = 1; i < 21; i++)
                arr[i] = 1;
        }
        else if (cmd == "empty")
        {
            for (int i = 1; i < 21; i++)
                arr[i] = 0;
        }

    }

}