#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n, c;
cin >> n >> c;
vector<int> v(n);
for (int i = 0; i < n; ++i)
cin >> v[i];
sort(v.begin(), v.end());
int maxDist = 0;
// start가 1인 이유: 최소거리
int start = 1, end = v[n - 1] - v[0];
while (start <= end) {
int mid = (start + end) / 2;
int curSet = 1;
int prev = v[0];
for (int i = 0; i < n; ++i) {
// 간격이 mid보다 클 때 공유기 설치
if (v[i] - prev >= mid) {
++curSet;
prev = v[i];
}
}
// 만약 공유기를 c보다 더 많이 설치했을 경우 간격을 넓힌다
if (curSet >= c) {
maxDist = max(maxDist, mid);
start = mid + 1;
}
else // c보다 적게 설치했을 경우 간격을 좁힌다
end = mid - 1;
}
cout << maxDist;
return 0;
}
'알고리즘 공부' 카테고리의 다른 글
백준 9251번 LCS C++ (0) | 2024.10.31 |
---|---|
백준 1987번 알파벳 C++ DFS (0) | 2024.10.30 |
백준 1753번 최단경로 C++ (0) | 2024.10.24 |
백준 14052번 연구소 C++ (0) | 2024.10.17 |
ios::sync_with_studio(false), cin.tie(NULL), endl와 “\n” (0) | 2024.05.09 |