forked from ndb796/python-for-coding-test
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path3.cpp
50 lines (43 loc) ยท 1.44 KB
/
3.cpp
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
#include <bits/stdc++.h>
using namespace std;
// ์ง์ ๊ฐ์(N)์ ๊ณต์ ๊ธฐ์ ๊ฐ์(C)
int n, c;
vector<int> arr;
int main() {
cin >> n >> c;
// ์ ์ฒด ์ง์ ์ขํ ์ ๋ณด๋ฅผ ์
๋ ฅ ๋ฐ๊ธฐ
for (int i = 0; i < n; i++) {
int x;
cin >> x;
arr.push_back(x);
}
// ์ด์ง ํ์ ์ํ์ ์ํด ์ ๋ ฌ ์ํ
sort(arr.begin(), arr.end());
int start = 1; // ๊ฐ๋ฅํ ์ต์ ๊ฑฐ๋ฆฌ(min gap)
int end = arr[n - 1] - arr[0]; // ๊ฐ๋ฅํ ์ต๋ ๊ฑฐ๋ฆฌ(max gap)
int result = 0;
while (start <= end) {
// mid๋ ๊ฐ์ฅ ์ธ์ ํ ๋ ๊ณต์ ๊ธฐ ์ฌ์ด์ ๊ฑฐ๋ฆฌ(gap)์ ์๋ฏธ
int mid = (start + end) / 2;
// ์ฒซ์งธ ์ง์๋ ๋ฌด์กฐ๊ฑด ๊ณต์ ๊ธฐ๋ฅผ ์ค์นํ๋ค๊ณ ๊ฐ์
int value = arr[0];
int cnt = 1;
// ํ์ฌ์ mid ๊ฐ์ ์ด์ฉํด ๊ณต์ ๊ธฐ๋ฅผ ์ค์นํ๊ธฐ
for (int i = 1; i < n; i++) { // ์์์๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ์ค์น
if (arr[i] >= value + mid) {
value = arr[i];
cnt += 1;
}
}
// C๊ฐ ์ด์์ ๊ณต์ ๊ธฐ๋ฅผ ์ค์นํ ์ ์๋ ๊ฒฝ์ฐ, ๊ฑฐ๋ฆฌ๋ฅผ ์ฆ๊ฐ์ํค๊ธฐ
if (cnt >= c) {
start = mid + 1;
result = mid; // ์ต์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅ
}
// C๊ฐ ์ด์์ ๊ณต์ ๊ธฐ๋ฅผ ์ค์นํ ์ ์๋ ๊ฒฝ์ฐ, ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ์์ํค๊ธฐ
else {
end = mid - 1;
}
}
cout << result << '\n';
}