문제 링크 : https://www.acmicpc.net/problem/1931

 

1931번: 회의실배정

(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

www.acmicpc.net

 

 문제설명 

첫째줄에 회의의 수N이 주어지고 그다음줄부터 N개의 회의 시작시간과 종료 시간이 주어딘다

이때 회의를 진행 할 수 있는 경우의수중 가장 큰 경우는 ?

 

처음에 어떻게 해야될지 몰라서 30분 고민하다가 그냥 인터넷 찾아봤다.

배낭 문제처럼 유명한 문제라고한다

 

 알고리즘 

 

1. 종료시간이 빠른 회의 부터 진행 ->진행 가능한 회의 중 빨리 끝나는거 진행 -> .... -> 총 진행한 회의수 출력 .

 

 코드 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
 
int main() {
 
    vector < pair<long longlong long>>  p;
 
    int N;
    cin >> N;
    for (int i = 0; i < N; i++) {
        int a, b;
        cin >> a >> b;
        p.push_back(make_pair(b, a));
    }
 
    //종료시간 기준 오름차순 정렬
    sort(p.begin(), p.end()); 
 
    //처음 진행하는 회의는 무조건 하니까 1부터 시작
    int result = 1
    int num = p[0].first;
 
    for (int i = 1; i < N; i++) {
        //진행 가능한 회의중 회의 진행이 가장 빨리끝나는 회의를 진행
        if (p[i].second >= num) {
            num = p[i].first;
            result++;
        }
 
    }
    cout << result;
}
cs

'c++ > 백준' 카테고리의 다른 글

백준 1074번 : Z  (0) 2020.04.13
백준 12100번 : 2048(easy)  (0) 2020.04.13
백준 11000번: 강의실 배정  (0) 2020.04.09
백준 1700번: 멀티탭 스케줄링  (0) 2020.04.09
백준 1003번 : 피보나치 함수  (0) 2020.04.06
ariz1623