본문 바로가기
알고리즘 문제풀이/백준

[백준 11723] 집합

by m2162003 2021. 2. 6.

www.acmicpc.net/problem/11723

 

11723번: 집합

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

www.acmicpc.net

stl에서 제공하는 집합을 사용해도 되지만 비트 마스킹으로 분류가 되어 있길래 비트마스킹을 사용해봤다.

 

특정 비트를 0으로 바꾸기 위해선 & 연산자 사용:

1<<X 인 비트를 ~를 사용하여 뒤집은 후에 &를 시행한다.

 

#include <iostream>

using namespace std;

int num;
int m;
int main(void)
{
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cin >> m;
  string cmd;
  int x;
  while (m--)
  {
    cin >> cmd;
    if (cmd == "add")
    {
      cin >> x;
      num = num | 1 << x;
    }
    else if (cmd == "remove")
    {
      cin >> x;
      num = num & ~(1 << x);
    }
    else if (cmd == "check")
    {
      cin >> x;
      if (num & 1 << x)
      {
        cout << 1 << "\n";
      }
      else
      {
        cout << 0 << "\n";
      }
    }
    else if (cmd == "toggle")
    {
      cin >> x;
      num ^= (1 << x);
    }
    else if (cmd == "all")
    {
      num = (1 << 21) - 1;
    }
    else
    {
      num = 0;
    }
  }
  return 0;
}

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

[백준 15591] Moo Tube  (0) 2021.02.17
[백준 1339] 단어 수학  (0) 2021.02.09
[백준 10971] 외판원 순회2  (0) 2021.02.05
[백준 18870] 좌표 압축  (0) 2021.02.02
[백준 14170] Counting Haybales  (0) 2021.02.01

댓글