코드
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <cmath>
using namespace std;
int tc, n, a, b, res, r = 200003, t = 200003;
vector<pair<int, int>> v;
int main() {
cin >>tc;
while (tc--) {
cin >> n;
v.resize(n);
res = 0;
r = 200003; t = 200003;
for (int i = 0; i < n; i++) {
cin >> v[i].first >> v[i].second;
}
sort(v.begin(), v.end());
// 1차 면접 순으로 정렬한 후, 1등과 그보다 2차 면접 성적이 나은 사람들을 뽑음
for (pair<int, int> pa : v) {
if (pa.first <= r || pa.second <= t) {
res++;
r = pa.first;
t = pa.second;
}
}
cout << res << '\n';
}
return 0;
}
풀이
사실 테케보고 이렇게 하면 될 거 같아서 정렬하고, 1차보다 나은 사람을 출력해줬는데 이게 왜 되는지는 모르겠다. 둘 다 지지 않는 케이스를 찾으면 되는 거 같기는 한데... 그리디는 진짜 증명이 어려운 듯하다. 나도 그리디 잘하고 싶다.
'백준' 카테고리의 다른 글
[백준] 2150번 Strongly Connected Component C++ 코드 (2) | 2024.11.14 |
---|---|
[백준] 1275번 커피숍2 C++ 코드 (1) | 2024.11.11 |
[백준] 12899번 데이터 구조 C++ 코드 (0) | 2024.11.11 |
[백준] 2243번 사탕상자 C++ 코드 (0) | 2024.11.11 |
[백준] 17484번 진우의 달 여행(Small) C++ 코드 (3) | 2024.11.11 |