#include <cstdio>
#include <vector>
#include <queue>
#include <iostream>
#include <cmath>
#include <algorithm>
#define ll long long
using namespace std;
int N, C, ans;
vector<int> v;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> N >> C;
for(int i=0;i<N;i++)
{
int a;
cin >> a;
v.push_back(a);
}
sort(v.begin(), v.end());
int left = 1;
int right = v.back();
int ans=0;
while(left <= right)
{
int cnt = 1;
int mid = (left + right) / 2;
int start = v[0];
for(int i=1;i<v.size();i++)
if(v[i] - start >= mid) {
start = v[i];
cnt++;
}
if(cnt >= C){
left = mid + 1;
ans=mid;
}
else right = mid - 1;
}
cout << ans;
return 0;
}
- 로직
집 사이간 간격
에 따라 심을 수 있는 공유기 수
를 구하고 우리가 세우려는 C개
보다 크거나 같을 때
간격을 늘리면서 결국 C개의 공유기
를 심을 수 있는 최대 거리
를 구한다
이분탐색
구현시 주의
답을 기억
하는 =(등호)
가 붙는 방향
은 앞으로 답이 될 수 있는 가능성이 있는 쪽
에 붙여주어야 한다
left
의 초기값
을 0
으로 하면 나누는 값
인 mid
가 0
이될 수 있으니 1
로 초기화하자