백준 1946 c++

magicdrill·2024년 2월 27일
0

백준 문제풀이

목록 보기
41/655

백준 1946 c++

첫번째 풀이는 이중반복문으로 인해 시간초과가 발생했다.
다른 분의 풀이를 참고하여 두번째 풀이를 적었다. 그리디 알고리즘 위주로 다시 공부해야겠다.

#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;
}

0개의 댓글