관리 메뉴

한다 공부

[C++] 백준 알고리즘 11723번 집합 본문

Algorithm/문제풀이

[C++] 백준 알고리즘 11723번 집합

사과당근 2021. 9. 16. 15:57

알고리즘 분류를 보니 비트마스킹이라고 되어있었다

하지만 비트마스킹이 익숙하지 않아서 set을 이용했다

 

아니나 다를까 나타나는 시간초과

 

ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);

 

를 이용해서 cin과 cout의 시간을 단축시키자

 

그리고 all 명령어를 받으면

기존 set 내용을 지우고

set에 1~20값을 새로 넣어야한다

 

이때 for문 쓰면 시간초과 뜬다

직접 값을 넣기로 하자...

 

 

11723

#include<iostream>
#include<set>

using namespace std;

int main() {

	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	set<int> s;
	int n;
	cin >> n;

	string str;
	int x;

	while (n--) {
		cin >> str;

		if (str == "add") {
			cin >> x;
			s.insert(x);
		}

		else if (str == "remove") {
			cin >> x;
			s.erase(x);
		}

		else if (str == "check") {
			cin >> x;
			if (s.find(x)==s.end()) cout << 0 << '\n';
			else cout << 1 << '\n';
		}

		else if (str == "toggle") {
			cin >> x;
			if (s.find(x) == s.end()) s.insert(x);
			else s.erase(x);
		}

		//여기서 for문을 이용해 set에 값을 넣으니 시간초과가 떴다
		//직접 값을 넣자
		if (str == "all")
			s = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 };

		if (str == "empty") {
			set<int> temp;
			s = temp;
		}
	}
}