hwooo
BOJ (C/C++) 11723번: 집합 본문
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 |