์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- ์ฌ๊ท
- Dijkstra
- Floyd
- ๊ตฌํ
- Union Find
- BFS
- ํ์๊ฐ์
- ์ด์งํธ๋ฆฌ
- ํฌํฌ์ธํฐ
- dfs
- ํธ๋ผ์ด
- ์๋ฎฌ๋ ์ด์
- ์ธ๊ทธ๋จผํธํธ๋ฆฌ
- ๋ฐฑํธ๋ํน
- PriorityQueue
- ๋นํธ๋ง์คํน
- ๋ถ๋ถ์งํฉ
- ์์ด
- ์ฐ์ ์์ํ
- dp
- ์นด์นด์ค
- ํ๋ก์ด๋์์
- LowerBound
- ์๋ฃ๊ตฌ์กฐ
- Django
- ๋ค์ต์คํธ๋ผ
- ์ด๋ถํ์
- ๊ทธ๋ฆฌ๋
- upperbound
- ์กฐํฉ
- Today
- Total
J
[JAVA] BOJ ๋ฐฑ์ค 2110 ๊ณต์ ๊ธฐ ์ค์น ๋ณธ๋ฌธ
[JAVA] BOJ ๋ฐฑ์ค 2110 ๊ณต์ ๊ธฐ ์ค์น
snowball๐ฐ 2023. 2. 27. 13:49https://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
๋ฌธ์
๋ํ์ด์ ์ง N๊ฐ๊ฐ ์์ง์ ์์ ์๋ค. ๊ฐ๊ฐ์ ์ง์ ์ขํ๋ x1, ..., xN์ด๊ณ , ์ง ์ฌ๋ฌ๊ฐ๊ฐ ๊ฐ์ ์ขํ๋ฅผ ๊ฐ์ง๋ ์ผ์ ์๋ค.
๋ํ์ด๋ ์ธ์ ์ด๋์๋ ์์ดํ์ด๋ฅผ ์ฆ๊ธฐ๊ธฐ ์ํด์ ์ง์ ๊ณต์ ๊ธฐ C๊ฐ๋ฅผ ์ค์นํ๋ ค๊ณ ํ๋ค. ์ต๋ํ ๋ง์ ๊ณณ์์ ์์ดํ์ด๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์, ํ ์ง์๋ ๊ณต์ ๊ธฐ๋ฅผ ํ๋๋ง ์ค์นํ ์ ์๊ณ , ๊ฐ์ฅ ์ธ์ ํ ๋ ๊ณต์ ๊ธฐ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ ํฌ๊ฒ ํ์ฌ ์ค์นํ๋ ค๊ณ ํ๋ค.
C๊ฐ์ ๊ณต์ ๊ธฐ๋ฅผ N๊ฐ์ ์ง์ ์ ๋นํ ์ค์นํด์, ๊ฐ์ฅ ์ธ์ ํ ๋ ๊ณต์ ๊ธฐ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ต๋๋ก ํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ง์ ๊ฐ์ N (2 ≤ N ≤ 200,000)๊ณผ ๊ณต์ ๊ธฐ์ ๊ฐ์ C (2 ≤ C ≤ N)์ด ํ๋ ์ด์์ ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ์ง์ ์ขํ๋ฅผ ๋ํ๋ด๋ xi (0 ≤ xi ≤ 1,000,000,000)๊ฐ ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค.
์ ์ฒด ์ฝ๋
import java.util.*;
import java.io.*;
public class Main {
static int C, N;
static long[] wifi;
public static void main(String[] args) throws Exception {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine(), " ");
N = Integer.parseInt(st.nextToken());
C = Integer.parseInt(st.nextToken());
wifi = new long[N];
for(int i=0; i<N; i++)
wifi[i] = Long.parseLong(bf.readLine());
Arrays.sort(wifi);
find(wifi[N-1] - wifi[0]);
}
static void find(long x) {
long start = 0; long end = x;
while(start <= end) {// ๋ ๊ฐ์ด ๊ฐ์์ง๋ ๊ฒฝ์ฐ ๋๋๊ฒ ๋จ
long mid = (start + end) / 2; // ๊ณต์ ๊ธฐ ์ฌ์ด์ ๊ฐ๋ฅํ ๊ฑฐ๋ฆฌ
if(find_dist(mid)) start = mid+1;
else end = mid - 1;
}
System.out.println(start-1);
}
static boolean find_dist(long m) {
int start = 0; int cnt = 1;
for(int i=0; i<N; i++) {
if(wifi[i] - wifi[start] >= m) {start = i; cnt++;}
}
if(cnt < C) return false;
else return true;
}
}
๐ก ์ด๋ถํ์์์ ์ค์ํ ๋ถ๋ถ์ while์ ์กฐ๊ฑด๊ณผ start, end์ ๊ฐฑ์ ๊ณผ ๊ฐฑ์ ์กฐ๊ฑด์ด๋ค.
์ด ๋ฌธ์ ์์ ์ ๋ต์ด ๋ ๊ธธ์ด๋ ๊ณต์ ๊ธฐ์ ๊ฐ์๋ฅผ C๋ก ๋ง๋๋ ๊ฑฐ๋ฆฌ์ด์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์กฐ๊ฑด์ ๊ฐ์๊ฐ C๋ณด๋ค (์๊ฑฐ๋) (ํฐ๊ฑฐ๋ ๊ฐ์) ๋ ๊ฒฝ์ฐ๋ก ๋ถ๋ฆฌํด์ผ ํ๋ค.
while์ ์กฐ๊ฑด์ min ≤ max๋ก ์ค์ ํ๊ธฐ ๋๋ฌธ์ while์ด ์ข ๋ฃ๋๋ฉด min = max+1์ ํํ๊ฐ ๋๋ค.
์ ๋ต์ด ๋๋ mid๋ else ์กฐ๊ฑด์ ์ํด mid-1์ด ๋๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ ๊ฒฐ๊ณผ๊ฐ์ max๋ min-1์ ์ถ๋ ฅํด์ผ ๋๋ค.
while(min < max)์ธ ๊ฒฝ์ฐ๋ ๋ ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ while์ ๋น ์ ธ๋์ค๋๋ฐ ์ด ๊ฒฝ์ฐ ๋ฌดํ loop๋ฅผ ๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๊ฒ ๋๋ค.
'๐ Problem Solving > ๐ BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] BOJ ๋ฐฑ์ค 4811 ์์ฝ (0) | 2023.03.28 |
---|---|
[JAVA] BOJ ๋ฐฑ์ค 1654 ๋์ ์๋ฅด๊ธฐ (0) | 2023.02.27 |
[JAVA] BOJ ๋ฐฑ์ค 2343 ๊ธฐํ ๋ ์จ (0) | 2023.02.27 |
[JAVA] BOJ ๋ฐฑ์ค 2805 ๋๋ฌด์๋ฅด๊ธฐ (0) | 2023.02.27 |
[JAVA] BOJ ๋ฐฑ์ค 1943 ๋์ ๋ถ๋ฐฐ (0) | 2023.02.24 |