- toc {:toc}
2110: 곡μ κΈ° μ€μΉ λ¬Έμ νμΈνκΈ°
νμ΄
λ¬Έμ μμ μꡬνλ κ°μ₯ μΈμ ν λ 곡μ κΈ° μ¬μ΄μ 거리λ₯Ό κ°λ₯ν ν¬κ² νλ κ²μ κ²°κ΅ μ΅λν μλ‘μ κ°κ²©μ΄ λ²μ΄μ§λ κ²μ μλ―Ένκ³ , μ΅λν λ²μ΄μ‘μ λμ κ°κ²©μμ μ΅μλ₯Ό μλ―Ένλ€. λλ¬Έμ λΉμ·ν κ°κ²©μ μ€μ νλ κ²μ΄ μ€μνλ€κ³ μκ°νλ€.
- μ²μμλ μ£Όμ΄μ§ μ§λ€μ κ°κ²©μ μ λΆ λ½μλ΄μΌνλ?
- μ²μ, λμ 곡μ κΈ° μ€μΉνκ³ μ΄λΆνμνλ©΄μ mid λ₯Ό μ€μΉν μ§μΌλ‘ μ ννλ λ°©μ?
μ΄λ κ² μκ°νμΌλ μκ°μ μΈ λΆλΆλ κ·Έλ κ³ , 2 λ²μ κ²½μ° λκ° μ¬κ·μ μΌλ‘ μ½λλ₯Ό μμ±ν΄μΌν κ² κ°μλ° λ κ² κ°μ§ μμλ€. 1 μκ° μ λ λΆμ‘κ³ μμ΄λ΄€λλ° μμ΄λμ΄κ° λ μ€λ₯΄μ§ μμ νμ΄λ₯Ό μ°Ύμλ΄€λ€. μκ³ λ¦¬μ¦μ νμΈνκ³ μ½λλ μ€μ€λ‘ μμ±ν΄λ΄€λ€.
μμ΄λμ΄ κ΅¬μ‘°
κ΅³μ΄ μ λ ₯λ°μ μ§λ€μ κ°κ²©μ κ°μ§κ³ λΉκ΅ν΄ νμ΄ν νμ μκ³ , mid λ₯Ό μ΅μ κ°κ²©μΌλ‘ μ€μ ν΄μ νμ΄νλ€λ μμ΄λμ΄μ΄λ€.
- μ λ ₯λ°μ μ§μ μ λ ¬νλ€. (μ΄λΆνμνκΈ° μν΄)
- κ°κ²©μ μ΅μ, μ΅λλ₯Ό start μ end λ‘ μ€μ νλ€.
- μ§λ€κ°μ κ°κ²©μ΄ mid λ³΄λ€ κΈΈλ€κ³ νλ©΄ μ΅μ κ°κ²©μ μΆ©μ‘±νκΈ° λλ¬Έμ 곡μ κΈ°λ₯Ό μ€μΉνλ€.
- μ§μ λͺ¨λ λμλ€λλ©΄μ νμΈνκ³ κ³΅μ κΈ° μ€μΉ κ°μκ° μꡬλ κ°μλ₯Ό μΆ©μ‘±νλμ§ νμΈνλ€.
- μ΄λ κ² μꡬλ₯Ό μΆ©μ‘±ν κ°κ²©λ€ μ€ μ΅λλ₯Ό μΆλ ₯νλ€.
#include <bits/stdc++.h>
using namespace std;
int N, C;
vector<int> home;
int search(int start, int end){
int mid, res=0, cnt;
while(start <= end){
mid = (start + end) / 2;
int installed = home[0];
cnt = 1;
for (int i=0; i<N; i++){
if (home[i]-installed >= mid){
cnt++;
installed = home[i];
}
}
if(cnt >= C){
res = max(res, mid);
start = mid+1;
}
else end = mid-1;
}
return res;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(); cout.tie();
int val;
cin >> N >> C;
for(int i=0; i<N; i++){
cin >> val;
home.push_back(val);
}
sort(home.begin(),home.end());
int min_dist = 1;
int max_dist = home[N-1]-home[0];
cout << search(min_dist, max_dist) << '\n';
return 0;
}