sm 기술 블로그
178. 2805(나무 자르기) - 자바 본문
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args)throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] tmp = br.readLine().split(" ");
int N = Integer.parseInt(tmp[0]);
long M = Long.parseLong(tmp[1]);
long[] tree = new long[N];
tmp = br.readLine().split(" ");
for (int i = 0; i < N; i++) {
tree[i] = Long.parseLong(tmp[i]);
}
long start = 1;
Arrays.sort(tree);
long end = tree[tree.length - 1];
while (end - start >= 0) {
long mid = (end + start) / 2;
long cutTree = 0;
for (long val : tree) {
if(val - mid > 0) {
cutTree += (val - mid);
}
}
if (cutTree >= M) {
start = mid + 1;
} else {
end = mid - 1;
}
}
System.out.println(end);
}
}
문제요약
주어진 나무들을 잘라 원하는 크기로 만들고자 한다.
설명
전 문제의 랜선자르기와 굉장히 유사하다.
https://smhope.tistory.com/472?category=1058420
177. 1654(랜선 자르기) - 파이썬
import sys input = sys.stdin.readline K, N = map(int, input().split()) lanLine = list(int(input()) for _ in range(K)) start = 1 end = max(lanLine) while(end - start >= 0): mid = (start + end) // 2 l..
smhope.tistory.com
다른 점은
for (long val : tree) {
if(val - mid > 0) {
cutTree += (val - mid);
}
}
자르는 것은 -이다.
잘랐을 경우 음수가 나올 수 있으므로 음수가 아닌 값들만 cutTree에 저장한다.
'문제 > 백준_자바' 카테고리의 다른 글
180. 1300(K번째 수) - 자바 (0) | 2022.08.17 |
---|---|
179. 2110(공유기 설치) - 자바 (0) | 2022.08.16 |
177. 1654(랜선 자르기) - 자바 (0) | 2022.08.15 |
176. 1920(수 찾기) - 자바 (0) | 2022.08.14 |
175. 25305(커트라인) - 자바 (0) | 2022.08.13 |
Comments