https://www.acmicpc.net/problem/2805
์ด๋ถํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๋ฌธ์ ์ด๋ค. ์ด์ ์ ํ๋ก๊ทธ๋๋จธ์ค์์ '์ ๊ตญ์ฌ์ฌ' ๋ฌธ์ ๋ฅผ ํ์๋ ๊ฒ์ด ๋์์ด ๋์๋ค.
https://programmers.co.kr/learn/courses/30/lessons/43238
์ ๋จ๊ธฐ์ ๋์ด(H)๋ฅผ ์ด๋ถํ์์ ํตํด ๊ตฌํ๋ค.
1. ์ด๋ถํ์์ ์ํด ์ ๋จ๊ธฐ์ ๋์ด๋ฅผ ์ค์ ํ๋ ๋ฐ ์ฐ์ผ ๋๋ฌด ๋ฐฐ์ด์ ์ ๋ ฌํ๋ค.
2. ๊ฐ๋ฅํ ์ ๋จ๊ธฐ์ ๋์ด(H)์ ์ต์๊ฐ(ํํ๊ฐ)๊ณผ ์ต๋๊ฐ(์ํ๊ฐ)์ ๊ตฌํ๋ค.
3. mid ๊ฐ์ผ๋ก ์ ๋จํ๊ณ ๋ค๊ณ ๊ฐ ๋๋ฌด๋ค์ ๋์ด ํฉ์ ๊ตฌํ๋ค.
4. ํฉ์ ์ ์ด๋ ํ์ํ ๋๋ฌด ๋์ด(M)๊ณผ ๋น๊ตํ๋ค
- ํฉ์ด M๋ณด๋ค ๋ ์์ผ๋ฉด->์ํ๊ฐ์ ์ค์ธ๋ค.
- ํฉ์ด M๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด ->ํํ๊ฐ์ ์ค์ด๊ณ ์ ๋จ๊ธฐ์ ์ค์ ํ ์ ์๋ ๋์ด(์ ๋ต)๋ฅผ mid์ผ๋ก ์ ์ฅํ๋ค.
5. ํํ๊ฐ<= ์ํ๊ฐ์ผ ๋๊น์ง ๋ฐ๋ณตํ์ฌ ์ ๋จ๊ธฐ์ ์ค์ ํ ์ ์๋ ๋์ด(์ ๋ต)์ ๊ฐฑ์ ํด๋๊ฐ๋ค.
์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class CuttingTree {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input1 = br.readLine().split(" ");
int N = Integer.parseInt(input1[0]);
int M = Integer.parseInt(input1[1]);
int[] tree = new int[N];
String[] input2 = br.readLine().split(" ");
for(int i = 0; i < N; i++) {
tree[i] = Integer.parseInt(input2[i]);
}
Arrays.sort(tree); //์ด๋ถ ํ์์ ์ํ ์ ๋ ฌ
int answer = 0;
int low = 0; //H ์ต์
int high = tree[tree.length - 1]; //H ์ต๋(๊ฐ์ฅ ํฐ ๋๋ฌด)
while(low <= high) {
int mid = (low + high) / 2;
long sum = 0;
for(int i = 0; i < N; i++) {
if(tree[i] > mid) { //์ ๋จํ๊ณ ๋จ์ผ๋ฉด
sum += (tree[i] - mid); //๋ค๊ณ ๊ฐ๊ธฐ
}
}
if(sum < M) { //M๋ณด๋ค ๋ ์ ์ ๋๋ฌด ๊ฐ์ ธ๊ฐ๋ฉด
high = mid - 1; //H ์ค์ด๊ธฐ
} else { //M๋ณด๋ค ๋ ๋ง์ ๋๋ฌด ๊ฐ์ ธ๊ฐ๋ฉด
low = mid + 1; //H ๋๋ฆฌ๊ธฐ
answer = mid;
}
}
System.out.println(answer);
}
}
*์ฃผ์ํ ์ *
๋์ด๋ 1,000,000,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ ์ ์ ๋๋ 0์ด๋ฏ๋ก ์๋ฅด๊ณ ๋จ์ ๊ธธ์ด์ ํฉ์ int๊ฐ ๋ด์ ์ ์๋ ํฌ๊ธฐ(2,147,483,647)๋ณด๋ค ํด ์๊ฐ ์๋ค. ๋ฐ๋ผ์ ์๋ฃํ์ long์ผ๋ก ํด์ผ ํ๋ค. ์ฒ์์ ์๋ฌด ์๊ฐ ์์ด int๋ก ํ๋ค๊ฐ ํ๋ ธ๋ค.
๊ฒฐ๊ณผ
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
11404๋ฒ - ํ๋ก์ด๋ (0) | 2022.04.06 |
---|---|
๋ฐฑ์ค 1780๋ฒ - ์ข ์ด์ ๊ฐ์ (0) | 2022.04.03 |
๋ฐฑ์ค 1072๋ฒ - ๊ฒ์ (0) | 2022.03.30 |
๋ฐฑ์ค 2156๋ฒ - ํฌ๋์ฃผ ์์ (0) | 2022.03.17 |
๋ฐฑ์ค 1149๋ฒ - RGB๊ฑฐ๋ฆฌ (0) | 2022.03.14 |