PS

BOJ 1931 - 회의실 배정

728x90

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

 

1931번: 회의실배정

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

www.acmicpc.net

 

Greedy 를 이용해 푸는 문제이다.

 

회의의 시작시간을 기준으로 정렬을 하고,

회의의 끝 시간을 기준으로 정렬을 한다

-> 이렇게 정렬을 두번 하는 이유는

(4,5) , (3,5) , (1,5)

 

같이 끝나는 시간만 동일한 케이스가 있을 경우

현재 상황에서 가장 최선의 선택을 하는 Greedy 의 원칙과 부합하지 않을 수 있기 때문이다

가장 먼저 시작하는

1초 부터 잡아야 Greedy 의 원칙과 맞기 때문에

(1,5) , (3,5) , (4,5) 로 정렬되어야 한다.

 

또한 회의가 끝나는 시간 보다 크거나 같은 경우에만 

다음 회의 시간으로 잡을 수 있다

 

- c++

#include <algorithm>
#include <iostream>
#include <utility>
#include <vector>
 
using namespace std;
 
int N, minimum, cnt;
vector<pair<intint>> vec;
 
bool compare(const pair<intint> &a, const pair<intint> &b) {
    return a.second < b.second;
}
 
int main() {
    cin.tie(0);
    ios_base::sync_with_stdio(0);
 
    cin >> N;
 
    for (int i = 0; i < N; i++) {
        int x, y;
        cin >> x >> y;
        vec.push_back(make_pair(x, y));
    }
 
    sort(vec.begin(), vec.end());
    sort(vec.begin(), vec.end(), compare);
 
    minimum = vec[0].second;
    cnt++;
 
    for (int i = 1; i < N; i++) {
        if (vec[i].first >= minimum) {
            minimum = vec[i].second;
            cnt++;
        }
    }
 
    cout << cnt;
 
    return 0;
}
cs

 

 

728x90

'PS' 카테고리의 다른 글

BOJ 2630 - 색종이 만들기  (0) 2020.09.05
BOJ 11724 - 연결 요소의 갯수  (0) 2020.09.04
BOJ 11399 - ATM  (0) 2020.08.30
BOJ 7576 - 토마토  (0) 2020.08.28
BOJ 1697 - 숨바꼭질  (0) 2020.08.28