728x90
728x90
https://www.acmicpc.net/problem/11723
11723번: 집합
첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.
www.acmicpc.net


난이도: solved.ac 실버 5
알고리즘 분류
구현, 비트마스킹
접근 방법
찾고자 하는 숫자의 번호를 index로 갖는 배열의 값을 1 또는 0으로 두어 집합 내 숫자의 유무를 확인할 수 있다.
set[5] = 1은 숫자 5가 집합 S에 있다는 것을 의미하고 set[5] = 0은 숫자 5가 집합 S에 없다는 것을 의미한다.
코드
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> int set[21]; int main() { int M, i, j; scanf("%d", &M); while (M) { char command[7]; int num; scanf("%s", &command); if (!strcmp(command, "add")) { scanf("%d", &num); set[num] = 1; } else if (!strcmp(command, "remove")) { scanf("%d", &num); set[num] = 0; } else if (!strcmp(command, "check")) { scanf("%d", &num); if (set[num]) printf("1\n"); else printf("0\n"); } else if (!strcmp(command, "toggle")) { scanf("%d", &num); if (set[num]) set[num] = 0; else set[num] = 1; } else if (!strcmp(command, "all")) { for (i = 1; i <= 20; i++) set[i] = 1; } else if (!strcmp(command, "empty")) { for (i = 1; i <= 20; i++) set[i] = 0; } M--; } return 0; }
반응형