Notice
Recent Posts
Recent Comments
Link
변수의 기록
(코테) 백준_2110_공유기 설치 *이분탐색 본문
import java.io.*;
import java.util.*;
public class Main {
static int N, C;
static int[] houses;
public static void main(String[] args) throws IOException {
// 입력
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken()); // 집 개수
C = Integer.parseInt(st.nextToken()); // 공유기 개수
houses = new int[N];
for (int i = 0; i < N; i++) {
houses[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(houses); // 좌표 오름차순 정렬
// 이분 탐색 시작: 최소 거리 (left), 최대 거리 (right)
int left = 1; // 가능한 최소 거리
int right = houses[N - 1] - houses[0]; // 가능한 최대 거리
int answer = 0;
while (left <= right) {
int mid = (left + right) / 2;
if (canInstall(mid)) {
answer = mid; // 거리 가능한 경우, 더 큰 거리 시도
left = mid + 1;
} else {
right = mid - 1; // 거리 너무 큼 → 줄이자
}
}
System.out.println(answer);
}
// 최소 거리 distance로 공유기 C개 설치 가능한지 확인
static boolean canInstall(int distance) {
int count = 1; // 첫 번째 집에 설치
int lastInstalled = houses[0];
for (int i = 1; i < N; i++) {
if (houses[i] - lastInstalled >= distance) {
count++;
lastInstalled = houses[i];
}
}
return count >= C; // 설치한 개수가 C개 이상이면 true
}
}
'기타 > 코딩테스트' 카테고리의 다른 글
(코테) 알고리즘 별 키워드 (0) | 2025.05.29 |
---|---|
(코테) 백준_1717_집합의 표현 *유니온 파인드 (0) | 2025.05.29 |
(코테) 백준_2512_예산 *이분 탐색 (Binary Search) (0) | 2025.05.28 |
(코테) 백준_1654_랜선 자르기 *이분 탐색 (0) | 2025.05.27 |
(코테) 백준_15661_링크와 스타트 *백트레킹 , 비트마스킹 + 브루트포스 코드 (0) | 2025.05.26 |