프로그래머스/2레벨

[프로그래머스 2레벨] 호텔 대실 (C++)

게임개발기원 2025. 2. 17. 22:47
#include <string>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

int solution(vector<vector<string>> book_time) {
    int answer = 0;

    vector<pair<int, int>>v;
    for (auto i : book_time) 
    {
        int s = stoi(i[0].substr(0, 2)) * 60 + stoi(i[0].substr(3, 2));
        int e = stoi(i[1].substr(0, 2)) * 60 + stoi(i[1].substr(3, 2)) + 10;
        v.push_back({s, e});  
    }

    sort(v.begin(), v.end());

    priority_queue<int, vector<int>, greater<int>> pq; //빨리 끝나는 시간 기준

    for(int i=0; i<v.size(); i++)
    {
        if(!pq.empty() && pq.top() <= v[i].first) pq.pop(); //이어서 가능
        pq.push(v[i].second); //새로운 시간대 추가
    }
    answer = pq.size();
    return answer;
}

 

시작 시간과 끝나는 시간을 계산하여 벡터에 담아준다.

이를 시작 시간 빨리 끝나는 순으로 정렬을 하고, 또 빨리 끝나는 시간 기준으로 pq를 선언해준다.

 

이후 벡터 값을 돌면서, pq에 기본적으로 끝나는 시간대를 넣어준다.

그리고 pq.top() 값을 체크하여 이 값이 시작하는 시간대보다 작거나 같다면 기존 pq 값을 제거 해준다.

이렇게 계산한 최종 pq 사이즈를 출력해주면 된다.