반응형
링크 : 2110번: 공유기 설치 (acmicpc.net)
2110번: 공유기 설치
첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가
www.acmicpc.net
> 풀이
이분탐색을 통해 해결합니다.
기준 : 공유기 사이의 거리
#include <bits/stdc++.h>
using namespace std;
int arr[200001];
int N, C;
int main(void)
{
scanf("%d %d", &N, &C);
for (int i = 0; i < N; i++)
scanf("%d", &arr[i]);
sort(arr, arr + N);
// bsearch
int start = 1, end = arr[N - 1] - arr[0];
int res = 0;
while (start <= end) {
int mid = (start + end) / 2;
int cnt = 1;
int idx = 0;
for (int i = 1; i < N; i++) {
int dis = arr[i] - arr[idx];
if (dis >= mid) {
idx = i;
cnt++;
}
}
if (cnt >= C) {
res = mid;
start = mid + 1;
}
else
end = mid - 1;
}
printf("%d", res);
return 0;
}
반응형
'알고리즘 (백준) > BOJ 길라잡이 (1)' 카테고리의 다른 글
백준 11286 (절대값 힙) / C++ (0) | 2021.07.12 |
---|---|
백준 15711 (환상의 짝꿍) / C++ (0) | 2021.05.31 |
백준 1826 (연료 채우기) / C++ (0) | 2021.05.22 |
백준 13305 (주유소) / C++ (0) | 2021.05.20 |
백준 1655 (가운데를 말해요) / C++ (0) | 2021.05.18 |