๋ฐ์ํ
[๋ฐฑ์ค] 2805๋ฒ ๋๋ฌด ์๋ฅด๊ธฐ
https://www.acmicpc.net/problem/2805
๋ฌธ์ ์ ๊ทผ
์ฒ์์๋ ๊ฐ์ด ์์กํ์ ๋ฐ์ ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ๊ฐ ์ด๋ถ ํ์์ด๋ผ๊ณ ์จ์ ธ์์ด์, ์๋ ์ ๋ฐฐ์ด ๊ธฐ์ต์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ค.
left, right, mid๋ฅผ ์ด์ฉํด์ ๊ฐ์ ์ฐพ์๋ค.
๋ง์ฝ ๋ฑ ๋จ์ด์ง๋ ๊ฐ์ด ์์ ๊ฒฝ์ฐ, ์ ์ด๋ m์ ๋๊ฒจ์ผํ๊ธฐ ๋๋ฌธ์ right๊ฐ์ returnํ๋๋ก ํ๋ค.
Code
import java.util.Arrays;
import java.util.Scanner;
public class BOJ2805 {
static int cutHeight(int[] trees, int m){
Arrays.sort(trees);
int left = 0;
int right = trees[trees.length-1];
while(left <= right){
long sum =0;
int mid = (left + right) / 2;
for(int tree : trees){
if(tree-mid > 0) sum += tree-mid;
}
if(sum > m) left = mid +1;
else if(sum < m) right = mid-1;
else{
return mid;
}
}
return right;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] trees = new int[n];
for (int i = 0; i <n ; i++) {
trees[i] = sc.nextInt();
}
System.out.println(cutHeight(trees,m));
}
}
์ด๋ ค์ ๋ ์ / ๋ฐฐ์ด ์ / ๋๋ ์
์ผ๋จ ์ด๋ถ ํ์์ด ์ ํํ๋ ๊ธฐ์ต์ด ๋์ง๊ฐ ์์๊ณ ์ด๋ฐ ๋๋์ด์์ง ํ๊ณ ํ์ด์ ์ฒ์์๋ left = mid +1, right = mid-1 ์ ๊ทธ๋ฅ mid๊ฐ๋ง ๋์ ํด์ ๋ฌดํ๋ฃจํ๊ฐ ๋์๋ค. ๊ธฐ๋ณธ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ํ ๋ฒ ์ ๋ฆฌํ๋ฉด์ ๊ณต๋ถํ ํ์์ฑ์ ๋๊ผ๋ค.
๋ฐ์ํ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm/Java][LeetCode] 121. Best Time to Buy and Sell Stock (0) | 2022.02.05 |
---|---|
[Algorithm/Java][LeetCode] 101. Symmetric Tree (0) | 2022.02.05 |
[Algorithm/Java][LeetCode] 70. Climbing Stairs (0) | 2022.01.25 |
[Algorithm/Java][LeetCode] 53. Maximum subarray (0) | 2022.01.23 |
[Algorithm/Java][ํ๋ก๊ทธ๋๋จธ์ค] ์ด์ํ ๋ฌธ์ ๋ง๋ค๊ธฐ (0) | 2022.01.21 |