본문 바로가기

Algorithm/Baekjoon BOJ

[백준][C++] 1931: 회의실 배정

반응형

 

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

 

1931번: 회의실 배정

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

www.acmicpc.net

 

 

 

 

 


- 문제

 

회의실을 예약하는 시작 시간과 끝나는 시간이 주어지면, 가장 많은 사람들이 회의실을 사용할 수 있는 경우를 구하는 문제다.

 

 

 


- 해설

 

저장을 할때 <시작시간,끝나는시간>으로 풀려고하면 진짜 힘들어지는 것 같다.

 

다른 사람들이 올린 질문에 답변 달린 힌트를 봤는데, <끝나는시간, 시작시간>으로 풀어보라고 해서 그렇게 했다가 바로 풀렸다.

 

<end, start>로 저장을 하면

이걸 정렬할 시에 

 

start 순서는 상관없이 end가 짧은것부터 저장이 됩니다.

 

그러면 이제 같은 end 중에서 어떤 start를 사용해도 상관이 없고(이전 end보다 더 작지만 않으면)

 

이걸 반복해서 문제를 풀 수 있다.

 


 

- 풀이

 

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

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int N, start, end, time, count = 0;
    vector<pair<int, int>> table;

    cin >> N;

    for (int i = 0; i < N; i++)
    {
        cin >> start >> end;
        table.push_back(pair<int, int>(end, start)); // 끝나는 시간부터 넣어서, 나중에 정렬할 때 끝나는 시간 순으로 정렬하도록
    }
    sort(table.begin(), table.end());
    time = table[0].first;
    count++;
    for (int i = 1; i <= N; i++)
    {
        if (table[i].second >= time) // 다음 시작시간이 끝나는 시간과 같거나 더 크면
        {
            time = table[i].first;
            count++;
        }
    }
    cout << count;

    return 0;
}
반응형

'Algorithm > Baekjoon BOJ' 카테고리의 다른 글

[백준][C++] 2740: 행렬 곱셈  (0) 2022.11.21
[백준][C++] 5430: AC  (0) 2022.11.21
[백준][C++] 13305: 주유소  (0) 2022.11.14
[백준][C++] 10986: 나머지 합  (0) 2022.11.14
[백준][C++] 25682: 체스판 다시 칠하기 2  (0) 2022.11.12