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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | #include <string> #include <vector> #include <queue> #include <algorithm> #include <iostream> using namespace std; int solution(vector<vector<string>> book_time) { int answer = 0; // 0부터 :직전까지 담아서 * 100, :다음부터 끝날때까지 담아서 vector<pair<int, int>> v; priority_queue<int, vector<int>, greater<>> pq; for (int i=0; i<book_time.size(); i++) { int start, end; string in = book_time[i][0]; for (int j=0; j<in.size(); j++) { if (in[j] == ':') { const int inHour = stoi(in.substr(0, j)) * 100; const int inMinute = stoi(in.substr(j+1)); start = inHour + inMinute; } } string out = book_time[i][1]; for (int j=0; j<out.size(); j++) { if (out[j] == ':') { int outHour = stoi(out.substr(0, j)) * 100; int outMinute = stoi(out.substr(j+1)) + 10; outHour += (outMinute / 60) * 100; outMinute = outMinute % 60; end = outHour + outMinute; } } v.push_back({start, end}); } ::sort(v.begin(), v.end(), [](const pair<int, int>& A, const pair<int, int>& B){ return A.first < B.first; }); // 1410 1420 1500 1640 1820 int cnt = 0; for (int i=0; i<v.size(); i++) { if (pq.empty() || v[i].first < pq.top()) { // 객실 추가 cnt++; pq.push(v[i].second); } else { // 이전 객실 사용 pq.pop(); pq.push(v[i].second); } } return answer = cnt; } | cs |
'컴퓨터공학 > 알고리즘 문제풀이' 카테고리의 다른 글
[프로그래머스 C++] 요격 시스템 (0) | 2024.10.31 |
---|---|
[프로그래머스 C++] 단속카메라 (0) | 2024.10.31 |
[프로그래머스 C++] 연속된 부분 수열의 합 (0) | 2024.09.03 |
[프로그래머스 C++] 다리를 지나는 트럭 (0) | 2024.08.15 |
[프로그래머스 C++] 기능개발 (0) | 2024.07.03 |