알고리즘 공부
백준 2110번 공유기 설치 C++
빵어
2024. 10. 29. 14:30
#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;
}