-
백준 1931 : 회의실 배정PS(알고리즘 문제풀이) 관련 글/백준(Baekjoon)풀이 2024. 8. 8. 09:57
문제 설명
여러 회의의 시작시간과 끝나는 시간이 주어졌을 때, 최대 사용할 수 있는 회의의 최대 개수를 출력한다. (총 회의의 수 ≤ 100,000)
이 문제는 그리디 알고리즘을 이용하여 풀 수 있다. 회의들의 시작 시간과 종료 시간을 바탕으로 최대한 많은 회의를 진행할 수있게 하려면 끝나는 시간을 기준으로 정렬하는 것이 좋다. 이를 알기 위해서는 입출력 예를 수직선에 그려보는 것이 좋다.
입력 예
11 1 4 3 5 0 6 5 7 3 8 5 9 6 10 8 11 8 12 2 13 12 14
를 수직선상에 나타내면
더보기0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
|----|
|----|
|------|
|----|
|--------|
|------|
|------|
|------|
|--------|
|---------|
|-----|와 같이 나타낼 수 있다. 회의의 시작시간을 기준으로 오름차순 순차탐색을 한다면, "회의의 시작시간은 더빠르지만 끝 시간이 더 길다"와 같은 반례가 나오기 때문에, 회의의 종료 시간기준 오름차순에서 순차탐색을 통해 답을 구해내야한다.
소스 코드
더보기#include <stdio.h> #include <vector> #include <algorithm> using namespace std; int n; vector <pair<int, int>> vec; int main() { int i, j; scanf("%d", &n); for (i = 0; i < n; i++) { int s, e; scanf("%d %d", &s, &e); vec.push_back({ e, s }); } sort(vec.begin(), vec.end()); int time = vec[0].first; int ans = 1; for (i = 1; i < n; i++) { if (time > vec[i].second) continue; time = vec[i].first; ans++; } printf("%d", ans); return 0; }
'PS(알고리즘 문제풀이) 관련 글 > 백준(Baekjoon)풀이' 카테고리의 다른 글
백준 9663 : N-Queen (0) 2024.08.09 백준 2171 : 직사각형의 개수 (0) 2024.08.09 백준(Baekjoon)문제 풀이 - 3665 최종 순위(C++) (3) 2024.03.05 백준(Baekjoon)문제 풀이 - 10800 컬러볼(C++) (1) 2024.03.05 백준(Baekjoon)문제 풀이 - 1300 K번째 수(C++) (0) 2024.03.04