백준

백준 1931번 (Gold 5)

이야기prog 2025. 3. 12. 20:14

https://www.acmicpc.net/problem/1931

정렬의 조건문을 잘 설정해야 하는 문제이다.

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

int main() {
	std::vector <std::pair<unsigned int, unsigned int>> v;

	int N;
	cin >> N;

	for (int i = 0; i < N; ++i) {
		unsigned int first, second;
		cin >> first >> second;
		v.emplace_back(make_pair(first,second));
	}

	std::sort(v.begin(), v.end(), [](std::pair<unsigned int, unsigned int> l, std::pair<unsigned int, unsigned int> r) {
		if (l.second == r.second) {
			if (l.first == l.second)
				return false;
			else if (r.first == r.second)
				return true;
			return l.first > r.first;
		}
		else 
			return l.second < r.second; });

	int count = 0; 
	unsigned int start = 0;
	for (auto iter = v.begin(); iter != v.end(); ++iter) {
		if (start <= iter->first) {
			start = iter->second;
			count++;
		}
	}

	std::cout << count;


	return 0;
}

회의시간이 끝나는 그 시점이 가장 작은 회의를 우선으로 두고 정렬하면 되는 문제인데, 세세하게 조건문을 추가해줘야 한다.

끝나는 회의시간이 같다면 전체 회의시간이 더 짧은것을 우선으로 두되, 시작하자마자 끝나는 회의 즉 (2, 2)같은 회의는 우선순위를 뒤로 두어야 회의가 가능해진다. 

만약 (1,2)와 (2,2)가 있을 때, (2,2)가 더 짧다고 우선순위가 먼저 오게되면 (1,2)는 회의를 할 수 없게 된다.

(1,2)가 먼저 시작하면 (2,2)도 그 이후 바로 가능하다.

'백준' 카테고리의 다른 글

백준 1929번(silver 3)  (0) 2025.03.14
백준 1541번 (silver 2)  (0) 2025.03.14
백준 1744번(Gold 4)  (0) 2025.03.12
백준 1715번 (Gold 4)  (0) 2025.03.11
백준 1300번(Gold 1)  (0) 2025.03.10