[백준 / C언어] 11723번: 집합

728x90
728x90

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

 

11723번: 집합

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

www.acmicpc.net

11723번 문제 설명 1
11723번 문제 설명 2

 

난이도: 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;
}
반응형