Skip to content

Commit de0dd08

Browse files
authored
[20251010] BOJ / G4 / 공유기 설치 / 강신지
1 parent e426eed commit de0dd08

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
static int N, C;
7+
static int[] house;
8+
9+
public static void main(String[] args) throws Exception {
10+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
11+
StringTokenizer st = new StringTokenizer(br.readLine());
12+
N = Integer.parseInt(st.nextToken());
13+
C = Integer.parseInt(st.nextToken());
14+
15+
house = new int[N];
16+
for (int i = 0; i < N; i++) house[i] = Integer.parseInt(br.readLine());
17+
Arrays.sort(house);
18+
19+
int lo = 1; // 최소 간격
20+
int hi = house[N - 1] - house[0]; // 최대 간격
21+
int ans = 0;
22+
23+
while (lo <= hi) {
24+
int mid = lo + (hi - lo) / 2;
25+
if (canPlace(mid)) { // mid 간격으로 C개 설치 가능
26+
ans = mid;
27+
lo = mid + 1;
28+
} else {
29+
hi = mid - 1;
30+
}
31+
}
32+
33+
System.out.println(ans);
34+
}
35+
36+
// dist 간격을 유지하며 C개 설치 가능한지
37+
static boolean canPlace(int dist) {
38+
int count = 1; // 첫 집에 설치
39+
int last = house[0];
40+
for (int i = 1; i < N; i++) {
41+
if (house[i] - last >= dist) {
42+
count++;
43+
last = house[i];
44+
if (count >= C) return true;
45+
}
46+
}
47+
return false;
48+
}
49+
}
50+
```

0 commit comments

Comments
 (0)