PS/Baekjoon Online Judge

[백준 11723] 집합 [C]

kimyoungrok 2021. 8. 14. 04:24

백준 - 11723


풀이

비트연산자를 이용해 풀이하는 문제이다.

all은 반복문을 돌릴필요없이 2^21에서 1을 빼면 20칸의 비트가 모두 1이 된다.


소스코드

#include <stdio.h>
#include <string.h>
int main(){
    int M, S = 0, num;
    char op[7];
    scanf("%d", &M);
    while (M--){
        scanf("%s", op);
        if (!strcmp(op, "all")) S = (1 << 21) - 1;
        else if (!strcmp(op, "empty")) S = 0;
        else {
            scanf("%d", &num);
            if (!strcmp(op, "add")) S |= (1 << num);
            else if (!strcmp(op, "remove")) S &= ~(1 << num);
            else if (!strcmp(op, "check"))
                puts(S & (1 << num) ? "1" : "0");
            else if (!strcmp(op, "toggle")) S ^= (1 << num);			
        }
    }
}

출처

 

11723번: 집합

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

www.acmicpc.net

'PS > Baekjoon Online Judge' 카테고리의 다른 글

[백준 2234] 성곽 [C]  (0) 2021.08.14
[백준 1094] 막대기 [C]  (0) 2021.08.14
[백준 17219] 비밀번호 찾기 [C++]  (0) 2021.08.14
[백준 7569] 토마토 [C]  (0) 2021.08.13
[백준 7576] 토마토 [C]  (0) 2021.08.13