첫번째 풀이는 이중반복문으로 인해 시간초과가 발생했다.
다른 분의 풀이를 참고하여 두번째 풀이를 적었다. 그리디 알고리즘 위주로 다시 공부해야겠다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void input_info(vector <pair<int, int>> &grade)
{
int recruit, i, resume_grade, interview_grade;
cin >> recruit;
for (i = 0; i < recruit; i++)
{
cin >> resume_grade >> interview_grade;
grade.push_back({ resume_grade, interview_grade });
}
return;
}
void find_result(vector <pair<int, int>> grade)
{
int recruit = grade.size();
int i, j, count = recruit, max;
//시간초과
/*for (i = 0; i < recruit; i++)
{
for (j = 0; j < recruit; j++)
{
if (i == j)
{
continue;
}
else
{
if (grade[i].first > grade[j].first && grade[i].second > grade[j].second)
{
count--;
break;
}
}
}
}*/
sort(grade.begin(), grade.end());
max = grade[0].second;
count = 0;
for (i = 0; i < recruit; i++)
{
if (grade[i].second <= max)
{
count++;
max = grade[i].second;
}
}
cout << count << "\n";
return;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int T;
cin >> T;
while (T--)
{
vector <pair<int, int>> grade;
input_info(grade);
find_result(grade);
}
return 0;
}