본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 11723 집합

by 까망 하르방 2021. 2. 28.
반응형

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

Approach

 비트마스크 (Bitmask) 

 

비트마스크 (Bitmask)

비트마스크 정수의 이진수 표현(Bit)을 자료 구조로 쓰는 기법 현대의 모든 CPU는 이진수를 이용해도 모든 자fy 표현 내부적으로 이진수를 사용하는 컴퓨터들은 이진법 관련 연산들을 아주 빨리

zoosso.tistory.com

집합 S에서 사용되는 숫자가 1 ≤ X ≤ 20이므로, 비트를 이용해서 표현

ex) S = 일 때,

      state = 10101000000000000001

ex) S = 일 때,

      state = 11110000000000000000

명령어의 개수가 M (1 ≤ M ≤ 3,000,000)이므로

빠른 입출력 처리를 위해서 아래 구문들 이용.

#define endl '\n'

ios::sync_with_stdio(false);

cin.tie(NULL);

cout.tie(NULL);


#include <iostream>
#include <cstring>
#include <string>
using namespace std;
#define endl '\n'
 
// 인덱스를 1~20으로 표현
bool state[21];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    int M, X;
    cin >> M;
 
    for (int i = 0; i < M; i++){
        string cmd;
        cin >> cmd;
 
        if (cmd == "all" || cmd == "empty"){
            if (cmd == "all"){
                for (int i = 1; i <= 20; i++)
                    state[i] = true;        
            }
            else if (cmd == "empty"){
                memset(state, false, sizeof(state));
            }
            continue;
        }
 
        // "all" or "empty" 외의 명령어
        cin >> X;
 
        if (cmd == "add" && !state[X])
            state[X] = true;
        else if (cmd == "remove" && state[X])
            state[X] = false;
        else if (cmd == "toggle"){
            if (state[X] == true) state[X] = false;
            else state[X] = true;
        }
        else if (cmd == "check"){
            if (state[X]) cout << 1 << endl;
            else cout << 0 << endl;
        }
    }
}

 

반응형

'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 1654 랜선 자르기  (0) 2021.03.06
[BOJ] 백준 11727 2×n 타일링 2  (0) 2021.03.01
[BOJ] 백준 11811 데스스타  (0) 2021.02.28
[BOJ] 백준 1062 가르침  (0) 2021.02.28
[BOJ] 백준 12813 이진수 연산  (0) 2021.02.28

댓글