Problem Solving/BOJ

[백준 11723번] [비트마스킹] 집합

  • -
728x90
반응형

Approach

전형적인 비트마스킹 문제이다.

 

Add : t의 i번째 비트를 키고 싶은 경우 ( t |= (1 <<  i ))

remove : t의 i번째 비트를 끄고 싶은 경우 (t &= ~(i << i))

check : t의 i번쨰 비트가 켜져있는지 확인 (t & (1 << i)) : 0이 나오면 켜져있지 않고, 나머지는 켜져있는 상태

toggle : t의 i번째 비트를 토글링 (t ^= ~(1 << i))

 

참고 : https://m.blog.naver.com/jh20s/221150706030

 

비트마스크(bit mask)

컴퓨터의 모든 CPU는 이진수를 이용해 모든 자료를 표현합니다. 이진수를 이용해 연산을 하면 매우 빠르...

blog.naver.com

Code

#include <bits/stdc++.h>
#define fastio ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0)

using namespace std;
typedef long long ll;

int main(void){
    fastio;
    int t;
    cin >> t;
    ll bitmask = 0LL;
    while(t--){
        string v;
        cin >> v;
        if(v == "add"){
            int t;
            cin >> t;
            bitmask |= 1 << (t - 1);
        }
        else if(v == "remove"){
            int t;
            cin >> t;
            bitmask &= ~(1 << (t - 1)); 
        }
        else if(v == "check"){
            int t;
            cin >> t;
            if(bitmask & (1 << (t - 1))){
                cout << 1 << "\n";
            }
            else cout << 0 << "\n";
        }
        else if(v == "toggle"){
            int t;
            cin >> t;
            bitmask ^= (1 << (t - 1));
        }
        else if(v == "all"){
            bitmask = (1 << 20) - 1;
        }
        else bitmask = 0;
    }
    return 0;
}
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.