๊ตฌ๊ฐ์ด ๋์ค๋ฉด ์ ๋ ฌ!์ ๋ ์ฌ๋ฆฌ์. ์ด๋์ ๋์ ๋ณต์ก๋๋ฅผ ๊ฐ์์ํฌ ์ ์๋ค.
[๋ฌธ์ ]
https://www.acmicpc.net/problem/1931
๊ฐ ํ์์ ๋ํด ์์์๊ฐ๊ณผ ๋๋๋ ์๊ฐ์ด ์ฃผ์ด์ ธ ์์ ๋,
๊ฐ ํ์๊ฐ ๊ฒน์น์ง ์๊ฒ ํ๋ฉด์ ํ์์ค์ ์ฌ์ฉํ ์ ์๋ ํ์์ ์ต๋ ๊ฐ์๋ฅผ ์ฐพ์.
ํ์์ ์ N(1 ≤ N ≤ 100,000)
์์ ์๊ฐ๊ณผ ๋๋๋ ์๊ฐ์ 2^31-1๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์ ๋๋ 0
[ํด๊ฒฐ๋ฐฉ๋ฒ]
ํ์์ ์๊ฐ ์ต๋ 100,000 ๊ฐ ์ด๋ฏ๋ก ์์ ํ์์ผ๋ก๋ ํ ์ ์๋ค. Greedy ๋ก ํ์ด์ผ ํ๋ค.
ํนํ, ๊ตฌ๊ฐ์ด ์ฃผ์ด์ง๋ฉด ์ ๋ ฌ์ ์๊ฐํ์. ๋ผ์ธ์ค์ํ ๋ฌธ์ ๋ผ ๋ถ๋ฅธ๋ค.
1) ์์ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
2) ๋๋๋ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
3) ํ์ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
์ 3๊ฐ์ง ์ฒ๋ผ ๋ชจ๋ ํ์ด๋ฐฉ๋ฒ์ ์๊ฐํ๋ฉฐ ์ด๋ป๊ฒ ํ์ด์ผ ํ ์ง๋ฅผ ๊ณ ๋ฏผํด๋ณด์.
๊ทธ๋ฆผ์ 2๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ๊ทธ๋ ค์ ธ ์๋๋ฐ, ์ ๋ถ๋ถ์ start, end ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ํํ ๊ฒฝ์ฐ๋ค.
start ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ๋ฉด 2๊ฐ๋ฐ์ ์ ํ์ด ์๋๋๋ฐ, end ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ๋ฉด 3๊ฐ ์ ํ ๊ฐ๋ฅํ๋ค. size๋ฅผ ๊ธฐ์ค์ผ๋ก ํด๋ 3๊ฐ ์ ํ์ด ๊ฐ๋ฅํ๋ค.
์๋ ๋ถ๋ถ์ size๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ ๋์ ๋ฐ๋ก์ด๋ค. size ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ฉด 1๊ฐ ๋ฐ์ ์ ํ์ด ์๋๋ค. end ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ํด์ผ 2๊ฐ๊ฐ ์ ํ ๊ฐ๋ฅํ๋ค.
์ฆ, ํ์์ค ๋ฐฐ์ ๋ฌธ์ ๋ end ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ์ฌ ์ ํํด์ผ ์ ํํ ํ์ด๊ฐ ๊ฐ๋ฅํ๋ค. ์ ๋ ฌ์ custome sort ํจ์๋ฅผ ๋ง๋ค๊ฑฐ๋ start ์๊ฐ๊ณผ end ์๊ฐ ์์น๋ฅผ ๋ฐ๊ฟ์ vector pair ์ ์ ์ฅํ์ฌ sort ํ ์ ์๋ค.
* ์ต์ข ๊ฒฐ๋ก : end ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๊ณ ์ด์ ํ์๊ฐ ๋๋๋ ์๊ฐ ์ดํ์ ์์ํ๋ ํ์๋ง ์ ํํ์ฌ ์ต๋ ๊ฐ์๋ฅผ ๊ตฌํ์.
[๋ฐ๋ก]
3
0 0
0 0
0 0
---
3
3
4 4
3 4
2 4
---
2
[์ฝ๋]
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// Custom Sort ํจ์
bool SortPairSecond(const pair<int, int>& left, const pair<int, int>& right) {
if (left.second == right.second) {
return left.first < right.first;
}
return left.second < right.second;
}
int main() {
int meetingNum, startNum, endNum, count = 0;
vector<pair<int, int>> meetings; // startTime, endTime
cin >> meetingNum;
for (int i = 0; i < meetingNum; i++) {
cin >> startNum >> endNum;
meetings.push_back({ startNum, endNum });
}
sort(meetings.begin(), meetings.end(), SortPairSecond);
// ์์๊ฐ ์ผ๋จ ๋ฃ๊ณ ๋น๊ต ์์
int meetingEndTime = meetings[0].second;
count++;
for (int i = 1; i < meetings.size(); i++) {
if (meetings[i].first >= meetingEndTime) { // ์ด์ ํ์๊ฐ ๋๋๋ ์๊ฐ ์ดํ์ ์์ํ๋ ํ์๋ง ๊ฐ๋ฅํจ
meetingEndTime = meetings[i].second;
count++;
}
}
cout << count << "\n";
return 0;
}