문제 원본 : https://www.acmicpc.net/problem/2110
2110번: 공유기 설치
첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가
www.acmicpc.net
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
int[] arr = new int[n];
for (int i = 0; i < n; ++i) {
arr[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(arr);
int min = 1;
int max = arr[n - 1] - arr[0];
int mid, ans = 0;
while (min <= max) {
mid = (max + min) / 2;
int idx = 0;
int cnt = 1;
for (int i = 1; i < n; ++i) {
if (arr[i] - arr[idx] >= mid) {
idx = i;
++cnt;
}
}
if (cnt < c) {
max = mid - 1;
} else {
min = mid + 1;
ans = mid;
}
}
bw.write(String.valueOf(ans));
bw.close();
br.close();
}
}
- 이분 탐색 문제
- 공유기 설치 가능 거리를 이분 탐색하는 문제이다.
- C만큼 설치가 불가능하면 거리를 줄이고,
- 설치가 가능하면 거리를 늘려서 최댓값을 찾는다.
'알고리즘 > BOJ' 카테고리의 다른 글
| [BOJ] 2239. 스도쿠 (0) | 2022.03.12 |
|---|---|
| [BOJ] 2565. 전깃줄 (0) | 2022.03.11 |
| [BOJ] 17298. 오큰수 (0) | 2022.03.08 |
| [BOJ] 1922.네트워크 연결 (0) | 2022.03.07 |
| [BOJ] 1766. 문제집 (0) | 2022.03.06 |