Notice
Recent Posts
Recent Comments
Link
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

hwooo

BOJ (C/C++) 11723번: 집합 본문

Study/Algorithm

BOJ (C/C++) 11723번: 집합

hwooo 2022. 12. 8. 07:49

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

 

11723번: 집합

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

www.acmicpc.net


풀이

문제의 제목부터 집합이라 set을 사용하려 했으나 수의 범위가 1~20까지이기에 배열을 사용했다.

또한 한 줄씩 입력 받으려고 cin.getline을 사용했는데 시간초과가 발생했고, scanf로 바꾸니 해결됐다.
cin은 scanf보다 2배 이상 느리다 하니, 입력 방식의 속도도 이 문제에서는 중요하다.


코드

#include <stdio.h>
#include <iostream>
#include <string.h>
#include<algorithm>
using namespace std;

int main() {
	int M, n;
	bool num[21] = { 0, };
	char s[10];

	scanf("%d\n", &M);
	for (int i = 0; i < M; i++) {
		scanf("%s", s);

		if (!strcmp(s, "add")) {
			scanf("%d", &n);
			num[n] = true;
		}
		else if (!strcmp(s, "remove")) {
			scanf("%d", &n);
			num[n] = false;
		}

		else if (!strcmp(s, "check")) {
			scanf("%d", &n);
			printf("%d\n", num[n]);
		}

		else if (!strcmp(s, "toggle")) {
			scanf("%d", &n);
			num[n] = !num[n];
		}

		else if (!strcmp(s, "all")) fill(num, num + 21, true);

		else if (!strcmp(s, "empty")) fill(num, num + 21, false);
	}
	return 0;
}

'Study > Algorithm' 카테고리의 다른 글

BOJ (C/C++) 1639번: 행운의 티켓  (0) 2022.12.09
BOJ (C/C++) 1629번: 곱셈  (0) 2022.12.09
BOJ (C/C++) 1197번: 최소 스패닝 트리  (0) 2022.12.08
BOJ (C/C++) 1976번: 여행 가자  (0) 2022.12.08
BOJ (C/C++) 13549번: 숨바꼭질 3  (0) 2022.12.08