백준 문제풀이

백준 21944번 - C++

diligent_gideok 2022. 5. 27. 15:11
#include <bits/stdc++.h>
using namespace std;

set<int> M[102]; // 난이도 L 1~100 에 문제번호 정렬 저장
int P1[100002];  // 문제 번호가 어떤 난이도인지 저장
int P2[100002]; // 문제 번호가 어떤 유형인지 저장

int n, p, l, g,x;
string s;

int main(void) {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n;
	while (n--) {
		cin >> p >> l >> g;
		M[l].insert(p);
		P1[p] = l;
		P2[p] = g;
	}
	cin >> n;
	while (n--) {
		cin >> s;
		if (s == "recommend") {
			cin >> g >> x;
			int flag = 0;
			if (x == 1) {
				for (int i = 100; i > 0; i--) {
					if (M[i].empty()) continue;
					auto it = prev(M[i].end());
					while (1) {
						if (P2[*it] == g) { cout << *it<<'\n'; flag = 1; break; }
						if (it == M[i].begin()) break;
						it = prev(it);
					}
					if (flag == 1) break;
				 }
			}
			else { // x = -1
				for (int i = 1; i <101; i++) {
					if (M[i].empty()) continue;
					auto it = M[i].begin();
					while (1) {
						if (P2[*it] == g) { cout << *it<<'\n'; flag = 1; break; }
						if (next(it) == M[i].end()) break;
						it = next(it);
					}
					if (flag == 1) break;
				}
			}
		}
		else if (s == "recommend2") {
			cin >> x;
			if (x == 1) {
				for (int i = 100; i > 0; i--) {
					if (M[i].empty()) continue;
					auto it = prev(M[i].end());
					cout << *it << '\n';
					break;
				}
			}
			else {
				for (int i = 1; i < 101; i++) {
					if (M[i].empty()) continue;
					auto it = M[i].begin();
					cout << *it << '\n';
					break;
				}
			}
		}
		else if (s == "recommend3") {
			cin >> x >> l;
			int flag = 0;
			if (x == -1) {
				for (int i = l-1; i > 0; i--) {
					if (M[i].empty()) continue;
					auto it = prev(M[i].end());
					cout << *it << '\n';
					flag = 1;
					break;
				}
				if(flag==0) cout << -1 << '\n';
			}
			else {
				for (int i = l; i < 101; i++) {
					if (M[i].empty()) continue;
					auto it = M[i].begin();
					cout << *it << '\n';
					flag = 1;
					break;
				}
				if (flag == 0) cout << -1 << '\n';
			}
		}
		else if (s == "add") {
			cin >> p >> l >> g;
			M[l].insert(p);
			P1[p] = l;
			P2[p] = g;
		}
		else if (s == "solved") {
			cin >> p;
			M[P1[p]].erase(p);
		}
	}
}

'백준 문제풀이' 카테고리의 다른 글

백준 2075번 - C++  (0) 2022.05.31
백준 1927번 - C++  (0) 2022.05.31
백준 23326번 - C++  (0) 2022.05.27
백준 21939번 - C++  (0) 2022.05.26
백준 1202번 - C++  (0) 2022.05.26