https://www.acmicpc.net/problem/11000
๋ฌธ์
์๊ฐ์ ์ฒญ์ ๋ง์คํฐ ๊น์ข ํ ์ ์๋์๊ฒ ์๋ก์ด ๊ณผ์ ๊ฐ ์ฃผ์ด์ก๋ค.
๊น์ข ํ ์ ์๋ํํ ๋ Si์ ์์ํด์ Ti์ ๋๋๋ N๊ฐ์ ์์ ์ด ์ฃผ์ด์ง๋๋ฐ, ์ต์์ ๊ฐ์์ค์ ์ฌ์ฉํด์ ๋ชจ๋ ์์ ์ ๊ฐ๋ฅํ๊ฒ ํด์ผ ํ๋ค.
์ฐธ๊ณ ๋ก, ์์ ์ด ๋๋ ์งํ์ ๋ค์ ์์ ์ ์์ํ ์ ์๋ค. (์ฆ, Ti ≤ Sj ์ผ ๊ฒฝ์ฐ i ์์ ๊ณผ j ์์ ์ ๊ฐ์ด ๋ค์ ์ ์๋ค.)
์๊ฐ์ ์ฒญ ๋์ถฉํ ๊ฒ ์ฐ๋ฆฌ๋ฉด, ์ ์๋์ ๋์๋๋ฆฌ์!
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 200,000)
์ดํ N๊ฐ์ ์ค์ Si, Ti๊ฐ ์ฃผ์ด์ง๋ค. (0 ≤ Si < Ti ≤ 109)
์ถ๋ ฅ
๊ฐ์์ค์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ผ.
ํ์ด
4%์์ ํ๋ ธ์ต๋๋ค ๊ฐ ๋ฌ๋ค๋ฉด
๊ฐ์๋ฅผ ์๋ง๊ฒ ์ ๋ ฌํ๋์ง ํ์ธํด๋ณด์
๋๋๋์๊ฐ์ด ๋น ๋ฅธ ์์ผ๋ก ํ๋ฉด ์๋๋ค. ๊ฐ์์๊ฐ(๋-์์)์ด ์งง์์๋ก ๋จผ์ ๋ฐฐ์ ํด์ผํ๋ค
๋ณธ ๋ฌธ์ ์์๋ {์์์๊ฐ, ๋๋๋์๊ฐ} ์ pair ์๋ฃํ์ ์ด์ฉํ์ฌ sort๋ฅผ ํด์ฃผ์ด ํ๋ฒ์ ์ ๋ ฌํ๋ค
์๊ฐ์ด๊ณผ ๊ฐ ๋ฌ๋ค๋ฉด
๋ณธ ๋ฌธ์ ์ ์ ๋ ฅ์ด ๋งค์ฐ ๋ง์ผ๋ฏ๋ก O(n^2) ์ ์๊ฐ๋ณต์ก๋๋ก๋ ํ์ด๊ฐ ๋ถ๊ฐ๋ฅํ๋ค๋ ์ ์ ์ฐธ๊ณ ํ์ (์๋์๋ ์ํ์ฐฉ์ค ์ฐธ๊ณ )
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
typedef pair<int, int> p; // {์์์๊ฐ, ๋๋๋์๊ฐ}
int solution(int n, vector<p> &lecture) {
priority_queue<int, vector<int>, greater<int>> room; // room.top() = ์ฌ์ฉ์ค์ธ ๊ฐ์์ค์ค ๊ฐ์ฅ ๋นจ๋ฆฌ ๋๋๋ ๊ฐ์์ค์ ๋๋๋ ์๊ฐ
sort(lecture.begin(), lecture.end()); // ์์์๊ฐ์ด ๋น ๋ฅธ ์์๋๋ก ์ ๋ ฌ (์์์๊ฐ์ด ๊ฐ๋ค๋ฉด ๋๋๋ ์๊ฐ์ด ๋น ๋ฅธ ์์)
for(int i=0; i<n; i++) {
if(!room.empty() && room.top() <= lecture[i].first)
// ๊ฐ์ฅ ๋นจ๋ฆฌ ๋๋ ๊ฐ์์ค์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค๋ฉด ํด๋น ๊ฐ์์ค์ ๊ฐ์ ๋ฐฐ์
room.pop();
room.push(lecture[i].second); // ๊ฐ์ฅ ๋นจ๋ฆฌ ๋๋ ๊ฐ์์ค์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด ์ ๊ฐ์์ค์ ๊ฐ์ ๋ฐฐ์
}
return room.size();
}
int main() {
ios_base :: sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n;
cin >> n;
vector<p> lecture(n, {0,0});
for(int i=0; i<n; i++)
cin >> lecture[i].first >> lecture[i].second;
cout << solution(n,lecture);
return 0;
}
/*
*/
์ํ์ฐฉ์ค
์ฒ์์๋ ํธํ๊ฒ ๊ตฌํํ์ผ๋ ๊ฐ์์ค์ ๋ฐฐ์ ํ๋ ๊ณผ์ ์์ ์ด์ค for๋ฌธ์ ๋๋ ค ์๊ฐ๋ณต์ก๋๊ฐ O(n^2)๊ฐ ๋์๊ณ ,
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef pair<int, int> p; // {์์์๊ฐ, ๋๋๋์๊ฐ}
int solution(int n, vector<p> &lecture) {
vector<int> room(n,0); // room[i] = i๋ฒ ๊ฐ์์ค์ ๋ง์ง๋ง ์์
์ด ๋๋ ์๊ฐ, ๊ฐ์์ค์ ์ต๋ ๊ฐ์๋ n์ ๋์ง ์์
sort(lecture.begin(), lecture.end()); // ์์์๊ฐ์ด ๋น ๋ฅธ ์์๋๋ก ์ ๋ ฌ
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
// ๊ฐ์์ค ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค๋ฉด(๊ฐ์์ค๋๋๋์๊ฐ <= ๊ฐ์์์์๊ฐ) ๊ฐ์ ๋ฐฐ์
if(room[j] <= lecture[i].first) {
room[j] = lecture[i].second;
break;
}
}
}
int maxRoom=0;
for(int i=0; i<n; i++) // ๊ฐ์๊ฐ ๋ฐฐ์ ๋(room[i]๊ฐ 0์ด ์๋) ๊ฐ์์ค์ ์ ์นด์ดํธ
if(room[i]>0)
maxRoom++;
return maxRoom;
}
int main() {
ios_base :: sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n;
cin >> n;
vector<p> lecture(n, {0,0});
for(int i=0; i<n; i++)
cin >> lecture[i].first >> lecture[i].second;
cout << solution(n,lecture);
return 0;
}
/*
*/
์๊ฐ ์กฐ๊ฑด์ด ๊น๋ค๋ก์ด ๋ณธ ๋ฌธ์ ํน์ฑ์ ๋ฐ๋ก ์๊ฐ์ด๊ณผ๊ฐ ๋ด๋ค..
๊ฐ์์ค์ ํด๋นํ๋ ๋ถ๋ถ์ ์ฐ์ ์์ํ (priority_queue, ํ(heap)) ๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํํ๊ณ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ฎ์ถฐ์ ์ฑ๊ณตํ๋ค.
'๐๏ธ ICPC Sinchon > Greedy' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 14659๋ฒ: ํ์กฐ์์ด์ ๋ฆฌํ๊ณ ์ดใ ใ (0) | 2023.01.31 |
---|---|
[BOJ G4][C++] ๋ฐฑ์ค 1339๋ฒ: ๋จ์ด ์ํ (0) | 2022.10.11 |
[BOJ S4][C++] ๋ฐฑ์ค 11399๋ฒ: ATM (0) | 2022.10.11 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ฝ๋ฉํ ์คํธ ์ฐ์ต ํ์๋ฒ(Greedy): ์ฒด์ก๋ณต (0) | 2022.10.11 |
[BOJ][C++] ๋ฐฑ์ค 1931๋ฒ: ํ์์ค ๋ฐฐ์ (0) | 2022.10.08 |