์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ๋ค์ต์คํธ๋ผ
- LowerBound
- Dijkstra
- ์ธ๊ทธ๋จผํธํธ๋ฆฌ
- ์์ด
- ๋ถ๋ถ์งํฉ
- ํธ๋ผ์ด
- ๊ทธ๋ฆฌ๋
- ๋นํธ๋ง์คํน
- BFS
- ํฌํฌ์ธํฐ
- ์ฐ์ ์์ํ
- ์นด์นด์ค
- ์๋ฃ๊ตฌ์กฐ
- ๋ฐฑํธ๋ํน
- ์กฐํฉ
- ํ๋ก์ด๋์์
- PriorityQueue
- Django
- ์ด๋ถํ์
- ์ฌ๊ท
- Union Find
- dfs
- upperbound
- Floyd
- ๊ตฌํ
- ์๋ฎฌ๋ ์ด์
- dp
- ํ์๊ฐ์
- ์ด์งํธ๋ฆฌ
- Today
- Total
J
[JAVA] BOJ ๋ฐฑ์ค 2805 ๋๋ฌด์๋ฅด๊ธฐ ๋ณธ๋ฌธ
[JAVA] BOJ ๋ฐฑ์ค 2805 ๋๋ฌด์๋ฅด๊ธฐ
snowball๐ฐ 2023. 2. 27. 11:47https://www.acmicpc.net/problem/2805
2805๋ฒ: ๋๋ฌด ์๋ฅด๊ธฐ
์ฒซ์งธ ์ค์ ๋๋ฌด์ ์ N๊ณผ ์๊ทผ์ด๊ฐ ์ง์ผ๋ก ๊ฐ์ ธ๊ฐ๋ ค๊ณ ํ๋ ๋๋ฌด์ ๊ธธ์ด M์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) ๋์งธ ์ค์๋ ๋๋ฌด์ ๋์ด๊ฐ ์ฃผ์ด์ง๋ค. ๋๋ฌด์ ๋์ด์ ํฉ์ ํญ์ M๋ณด
www.acmicpc.net
๋ฌธ์
์๊ทผ์ด๋ ๋๋ฌด M๋ฏธํฐ๊ฐ ํ์ํ๋ค. ๊ทผ์ฒ์ ๋๋ฌด๋ฅผ ๊ตฌ์ ํ ๊ณณ์ด ๋ชจ๋ ๋งํด๋ฒ๋ ธ๊ธฐ ๋๋ฌธ์, ์ ๋ถ์ ๋ฒ๋ชฉ ํ๊ฐ๋ฅผ ์์ฒญํ๋ค. ์ ๋ถ๋ ์๊ทผ์ด๋ค ์ง ๊ทผ์ฒ์ ๋๋ฌด ํ ์ค์ ๋ํ ๋ฒ๋ชฉ ํ๊ฐ๋ฅผ ๋ด์ฃผ์๊ณ , ์๊ทผ์ด๋ ์๋ก ๊ตฌ์ ํ ๋ชฉ์ฌ์ ๋จ๊ธฐ๋ฅผ ์ด์ฉํด์ ๋๋ฌด๋ฅผ ๊ตฌํ ๊ฒ์ด๋ค.
๋ชฉ์ฌ์ ๋จ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ํ๋ค. ๋จผ์ , ์๊ทผ์ด๋ ์ ๋จ๊ธฐ์ ๋์ด H๋ฅผ ์ง์ ํด์ผ ํ๋ค. ๋์ด๋ฅผ ์ง์ ํ๋ฉด ํฑ๋ ์ด ๋ ์ผ๋ก๋ถํฐ H๋ฏธํฐ ์๋ก ์ฌ๋ผ๊ฐ๋ค. ๊ทธ ๋ค์, ํ ์ค์ ์ฐ์ํด์๋ ๋๋ฌด๋ฅผ ๋ชจ๋ ์ ๋จํด๋ฒ๋ฆฐ๋ค. ๋ฐ๋ผ์, ๋์ด๊ฐ H๋ณด๋ค ํฐ ๋๋ฌด๋ H ์์ ๋ถ๋ถ์ด ์๋ฆด ๊ฒ์ด๊ณ , ๋ฎ์ ๋๋ฌด๋ ์๋ฆฌ์ง ์์ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด, ํ ์ค์ ์ฐ์ํด์๋ ๋๋ฌด์ ๋์ด๊ฐ 20, 15, 10, 17์ด๋ผ๊ณ ํ์. ์๊ทผ์ด๊ฐ ๋์ด๋ฅผ 15๋ก ์ง์ ํ๋ค๋ฉด, ๋๋ฌด๋ฅผ ์๋ฅธ ๋ค์ ๋์ด๋ 15, 15, 10, 15๊ฐ ๋ ๊ฒ์ด๊ณ , ์๊ทผ์ด๋ ๊ธธ์ด๊ฐ 5์ธ ๋๋ฌด์ 2์ธ ๋๋ฌด๋ฅผ ๋ค๊ณ ์ง์ ๊ฐ ๊ฒ์ด๋ค. (์ด 7๋ฏธํฐ๋ฅผ ์ง์ ๋ค๊ณ ๊ฐ๋ค) ์ ๋จ๊ธฐ์ ์ค์ ํ ์ ์๋ ๋์ด๋ ์์ ์ ์ ๋๋ 0์ด๋ค.
์๊ทผ์ด๋ ํ๊ฒฝ์ ๋งค์ฐ ๊ด์ฌ์ด ๋ง๊ธฐ ๋๋ฌธ์, ๋๋ฌด๋ฅผ ํ์ํ ๋งํผ๋ง ์ง์ผ๋ก ๊ฐ์ ธ๊ฐ๋ ค๊ณ ํ๋ค. ์ด๋, ์ ์ด๋ M๋ฏธํฐ์ ๋๋ฌด๋ฅผ ์ง์ ๊ฐ์ ธ๊ฐ๊ธฐ ์ํด์ ์ ๋จ๊ธฐ์ ์ค์ ํ ์ ์๋ ๋์ด์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋๋ฌด์ ์ N๊ณผ ์๊ทผ์ด๊ฐ ์ง์ผ๋ก ๊ฐ์ ธ๊ฐ๋ ค๊ณ ํ๋ ๋๋ฌด์ ๊ธธ์ด M์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000)
๋์งธ ์ค์๋ ๋๋ฌด์ ๋์ด๊ฐ ์ฃผ์ด์ง๋ค. ๋๋ฌด์ ๋์ด์ ํฉ์ ํญ์ M๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ธฐ ๋๋ฌธ์, ์๊ทผ์ด๋ ์ง์ ํ์ํ ๋๋ฌด๋ฅผ ํญ์ ๊ฐ์ ธ๊ฐ ์ ์๋ค. ๋์ด๋ 1,000,000,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ ์ ์ ๋๋ 0์ด๋ค.
์ ์ฒด ์ฝ๋
import java.util.*;
import java.io.*;
public class Main {
static int N;
static long M;
static long[] tree;
static long result = 0;
public static void main(String[] args) throws Exception {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(bf.readLine(), " ");
N = Integer.parseInt(st.nextToken());
M = Long.parseLong(st.nextToken());
tree = new long[N]; long max = 0; long min = Long.MAX_VALUE;
st = new StringTokenizer(bf.readLine(), " ");
for(int i =0 ;i<N; i++) {
tree[i] = Long.parseLong(st.nextToken());
max = Math.max(max, tree[i]);
min = Math.min(min, tree[i]);
}
cut(min, max);
}
static void cut(long start, long end) {
long min = 0; long max = end;
while(min <= max) {
long mid = (min + max) / 2;
long sum = 0;
for(long h : tree) {
if(h - mid > 0) {
sum += (h - mid);
}
}
if(sum < M) {
max = mid-1;
}
else {
min = mid + 1;
}
}
System.out.println(max);
}
}
๐ก ์ด๋ถํ์์์ ์ค์ํ ๋ถ๋ถ์ while์ ์กฐ๊ฑด๊ณผ min, max์ ๊ฐฑ์ ๊ณผ ๊ฐฑ์ ์กฐ๊ฑด์ด๋ค.
์ด ๋ฌธ์ ์์ ์ ๋ต์ด ๋ H๋ M์ด๊ฑฐ๋ M๋ณด๋ค ํฐ ๋๋ฌด๋ฅผ ์๋ฅด๋ ๋์ด์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์กฐ๊ฑด์ sum์ด M๋ณด๋ค (์๊ฑฐ๋) (๊ฐ๊ฑฐ๋ ํฐ) ๋ ๊ฒฝ์ฐ๋ก ๋ถ๋ฆฌํด์ผ ํ๋ค.
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 ๋ฐฑ์ค 2110 ๊ณต์ ๊ธฐ ์ค์น (0) | 2023.02.27 |
[JAVA] BOJ ๋ฐฑ์ค 2343 ๊ธฐํ ๋ ์จ (0) | 2023.02.27 |
[JAVA] BOJ ๋ฐฑ์ค 1943 ๋์ ๋ถ๋ฐฐ (0) | 2023.02.24 |