풀이
비트연산자를 이용해 풀이하는 문제이다.
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);
}
}
}
출처
'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 |