https://www.acmicpc.net/problem/11723
11723번: 집합
첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.
www.acmicpc.net
집합 문제는 set container를 사용하면 시간 초과가 발생합니다.
따라서 x가 S에 존재하는 지 나타내는 bool 배열을 이용하면 문제를 해결할 수 있습니다.
삽입 할 때는 해당 위치를 true로, 제거할 때는 false로 만들어주면 됩니다.
아래는 전체 코드입니다.
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n; cin >> n;
bool exist[21];
while(n--){
string op; cin >> op;
int v;
if(op == "add"){
cin >> v;
exist[v] = true;
}else if(op == "remove"){
cin >> v;
exist[v] = false;
}else if(op == "check"){
cin >> v;
if(exist[v]) cout << 1 << "\n"; else cout << 0 << "\n";
}else if(op == "toggle"){
cin >> v;
exist[v] = !exist[v];
}else if(op == "all"){
for(int i = 1; i <= 20; i++) exist[i] = true;
}else{ // empty
for(int i = 1; i <= 20; i++) exist[i] = false;
}
}
}
'Algorithm' 카테고리의 다른 글
[백준 11659번] 구간 합 구하기 4 (0) | 2022.04.05 |
---|---|
[백준 18870번] 좌표 압축 (C++) (0) | 2022.04.03 |
[백준 17837번] 새로운 게임 2 (C/C++) (0) | 2022.04.01 |
코딩 테스트, 알고리즘 꿀 Tip! (0) | 2022.03.23 |
[백준 1107번] 리모컨 (C/C++) (0) | 2022.03.15 |