-
백준 - 회의실 배정 (1931) [C++]문제 풀이/백준 2023. 8. 16. 17:29반응형
이 문제는 그리디를 이용해서 푸는 문제이다. 일단 완전 탐색을 이용하는 것은 입력이 10만이므로 불가능하다. 따라서 그리디를 사용해야 하는데, 여기서 중요한 것은 끝나는 시간에 대해 오름차순으로 정렬하고, 끝나는 시간이 같을 때 시작 시간에 대해 오름차순 정렬해야 한다는 것이다. 결국 얼마나 많이 회의실을 배정할 수 있냐이므로, 끝나는 시간이 일찍 끝날 수록 많은 배정이 가능하기 때문이다.
#include <iostream> #include <utility> #include <vector> #include <algorithm> using namespace std; bool compare(pair<int, int> &a, pair<int, int> &b) { if (a.second == b.second) { return a.first < b.first; } return a.second < b.second; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int N; vector<pair<int, int>> meetings; cin >> N; for (int i = 0; i < N; i++) { int a, b; cin >> a >> b; meetings.push_back({ a, b }); } sort(meetings.begin(), meetings.end(), compare); int index = 0; int answer = 0; int last = -1; while (index < meetings.size()) { int start = meetings[index].first; int end = meetings[index].second; if (last <= start) { answer++; last = end; } index++; } cout << answer << '\n'; return 0; }
반응형'문제 풀이 > 백준' 카테고리의 다른 글
백준 - 주유소 (13305) [C++] (0) 2023.08.16 백준 - 로프 (2217) [C++] (0) 2023.08.16 백준 - 택배 배송 (5972) [C++] (0) 2023.08.16 백준 - 동전 1 (2293) [C++] (0) 2023.08.15 백준 - 동전 2 (2294) [C++] (0) 2023.08.15