sm 기술 블로그

178. 2805(나무 자르기) - 자바 본문

문제/백준_자바

178. 2805(나무 자르기) - 자바

sm_hope 2022. 8. 15. 22:18
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