오늘의 알고리즘
[C++] 백준 2110 공유기 설치
하늘하늘 .
2022. 6. 15. 16:33
#include <iostream>
#include <algorithm>
#include <vector>
int main()
{
int N = 0;
int C = 0;
std::cin >> N >> C;
std::vector<long long> vec(N, 0);
for (int i = 0; i < N; ++i)
{
std::cin >> vec[i];
}
std::sort(vec.begin(), vec.end());
int iLeft = 0;
int iRight = vec[N - 1];
int iAns = -1;
while (iLeft <= iRight)
{
int iCount = 1;
int iPre = 0;
int iMid = (iLeft + iRight) * 0.5;
for (int i = 1; i < N; ++i)
{
if (vec[i] - vec[iPre] >= iMid)
{
iPre = i;
++iCount;
}
}
if (iCount >= C)
iLeft = iMid + 1;
else
iRight = iMid - 1;
if (iAns < iMid && iCount >= C)
iAns = iMid;
}
std::cout << iAns;
return 0;
}
이분 탐색
1. 거리 탐색하기 위해서 무조건 sort
2. 기준을 중간으로 잡아놓고 C값만큼 돌릴 수 있는지 확인