카테고리 없음
[C] 백준 - 2110번: 공유기 설치
C0MPAS
2024. 5. 15. 21:35
5월 15일(수) - 이분 탐색(2110번)
https://www.acmicpc.net/problem/2110
최초 생각 정리
문제점
풀이
(풀이출처 -> https://wonsjung.tistory.com/68)
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>
#include <stdlib.h>
int N, C;
int arr[200001];
int compare(const void* a, const void* b)
{
int num1 = *(int*)a;
int num2 = *(int*)b;
if (num1 > num2)
{
return 1;
}
else if (num1 < num2)
{
return -1;
}
else
{
return 0;
}
}
int MAX(int x, int y)
{
return ((x > y) ? (x) : (y));
}
int is_on(int x)
{
int count = 1;
int prev = arr[0];
for (int i = 1; i < N; i++)
{
if (arr[i] - prev >= x)
{
count++;
prev = arr[i];
}
}
if (count >= C)
{
return 1;
}
return 0;
}
int main(void)
{
scanf("%d %d", &N, &C);
for (int i = 0; i < N; i++)
{
scanf("%d", &arr[i]);
}
qsort(arr, N, sizeof(int), compare);
int left = 1;
int right = arr[N - 1] - arr[0];
int answer = 0;
while (left <= right)
{
int mid = (left + right) / 2;
if (is_on(mid))
{
answer = MAX(answer, mid);
left = mid + 1;
}
else
{
right = mid - 1;
}
}
printf("%d", answer);
return 0;
}