Skip to content

Commit a30df9d

Browse files
Merge pull request #466 from syoh0708/0x16_19700
Create 19700.cpp
2 parents 02511cf + 5e58c21 commit a30df9d

File tree

1 file changed

+39
-5
lines changed

1 file changed

+39
-5
lines changed

0x16/solutions/19700.cpp

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,45 @@
1-
// Authored by : BaaaaaaaaaaarkingDog
1+
// Authored by : syoh0708
22
// Co-authored by : -
3-
// http://boj.kr/****************
3+
// http://boj.kr/c805ab6be00244ba9b563dbec6619ca5
44
#include <bits/stdc++.h>
5+
56
using namespace std;
67

7-
int main(void){
8+
int n;
9+
pair<int, int> a[500005];
10+
11+
int main() {
812
ios::sync_with_stdio(0);
913
cin.tie(0);
10-
11-
}
14+
15+
cin >> n;
16+
17+
for (int i = 0; i < n; i++)
18+
cin >> a[i].first >> a[i].second;
19+
20+
sort(a, a + n, greater<pair<int, int>>());
21+
22+
multiset<int> s;
23+
24+
for (int i = 0; i < n; i++) {
25+
auto it = s.lower_bound(-a[i].second + 1);
26+
if (it == s.end()) s.insert(-1);
27+
else {
28+
int val = *it;
29+
30+
s.erase(it);
31+
s.insert(val - 1);
32+
}
33+
}
34+
35+
cout << s.size();
36+
}
37+
/**
38+
* 키의 내림차순으로 정렬한 뒤 수강생을 팀에 배정하면
39+
* 수강생 S를 인원이 n명인 팀에 배정하면 S의 등수는 (n + 1)등이 된다.
40+
* 따라서 수강생 S가 x등 안에 들고 싶다면,
41+
* 팀원이 (x - 1)명 이하인 팀이 있다면 그 중 팀원이 가장 많은 팀에 배정하고
42+
* 팀원이 (x - 1)명 이하인 팀이 없다면 새로운 팀을 배정한다.
43+
* multiset이 기본적으로 오름차순으로 정렬되고, (x - 1)명 이하인 팀 중에서 팀원 수가 가장 많은 팀을 원하기 때문에
44+
* 팀원 수에 -(마이너스)를 붙이고, lower_bound로 찾으면 된다.
45+
*/

0 commit comments

Comments
 (0)