반응형
    
    
    
  문제 링크
2805번: 나무 자르기
첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M을
www.acmicpc.net
문제 풀이
이 문제는 이분탐색에 분류되어 있는 문제이다.
이분탐색은 정렬되어있는 배열에서 원하는 값을 찾아가는 탐색법이다.
그런데 이 문제는 parametric search이라는 스킬을 이용해서 푼다.
간단하게 설명하자면 이분탐색은 시작과 끝의 중간점을 찾고 찾는 값이 더 크면 시작점을 중간점으로 잡고, 더 작으면 끝점을 중간점으로 잡고 다시 탐색하는것을 찾을 때 까지 반복한다.
그래서 원하는 값을 찾으면 종료시키는데, parametric search는 원하는값을 찾아도 계속해서 찾아나간다고 볼 수 있다.
자세한 코드는 다음과 같다.
소스 코드
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int M = sc.nextInt();
		int [] treeLen = new int [N];
		int max = 0;
		int min = 1;
		int answer = 0;
		for (int i = 0; i < treeLen.length; i++) {
			treeLen[i] = sc.nextInt();
			max= Math.max(max, treeLen[i]);
		}
		long pivot = 0;
		while(max>=min) {
			long sum = 0;
            pivot = (0L+max +min) /2;
			for (int i = 0; i < treeLen.length; i++) {
				long len = treeLen[i] -pivot;
				if(len>0) sum += len;
			}
			if(sum >= M) {
				min = (int) (pivot +1);
				answer = Math.max(answer, (int)pivot);
			}else {
				max = (int) (pivot -1);
			}
		}
		System.out.println(answer);
	}
}반응형
    
    
    
  'Problem Solving' 카테고리의 다른 글
| [ 백준 1520 ] 내리막 길 - Java (0) | 2021.01.04 | 
|---|---|
| [ 백준 2630 ] 색종이 만들기 - Java (0) | 2020.12.31 | 
| [ 백준 1629 ] 곱셈 - Java (0) | 2020.12.18 | 
| [ 백준 1149 ] RGB 거리 - Java (1) | 2020.12.16 | 
| [ 백준 1904 ] 01타일 ( Java ) (0) | 2020.12.15 |