알고리즘 문제풀이/백준

#2805 : 나무 자르기

모항 2022. 6. 15. 17:03

풀이방법

사용된 것:

이분 탐색

 

2022.06.15

랜선 자르기 문제와 동일한 방식으로 풀면 된다.

 

#1654 : 랜선 자르기

풀이방법 사용된 것: 이분 탐색 2022.06.14 1 이상, 갖고 있는 가장 긴 랜선의 길이 이하 중에 정답이 존재한다. 이 범위 내를 이분탐색하면 된다. 범위를 1부터 갖고 있는 가장 긴 랜선보다 1 큰 값까

blowupmomo.tistory.com

특정 높이로 기계를 설정하고 나무를 잘랐을 때 얻을 수 있는 목재의 길이가 M 미만인지 아닌지를 판별하여 이분 탐색을 한다.

 

코드

Java(2022.06.15)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer st= new StringTokenizer(br.readLine());
		
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		int[] trees = new int[n];
		
		st = new StringTokenizer(br.readLine());
		for(int i=0; i<n; i++) trees[i] = Integer.parseInt(st.nextToken());
		
		Arrays.sort(trees);
		
		int start = 1;
		int end = trees[n-1]+1;
		
		//이분탐색 하기
		while(start<end) {
			int mid = (start+end)/2;
			long sum = 0;
			for(int i: trees) if(i>mid) sum += i-mid;
			
			if(sum<m) end = mid;
			else start = mid+1;
		}
		
		//정답 출력
		System.out.print(end-1);
	}

}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

#1251 : 단어 나누기  (0) 2022.06.17
#18111 : 마인크래프트  (0) 2022.06.17
#1654 : 랜선 자르기  (0) 2022.06.14
#1822 : 차집합  (0) 2022.06.13
#1246 : 온라인 판매  (0) 2022.06.12