본문 바로가기
알고리즘/Class 2

백준 BOJ 2805번 - 나무 자르기

by edvedv 2022. 8. 30.


접근 방법

 

이전에 풀었던 1654번 랜선 자르기와 유사한 문제다.

 

https://edvedv.tistory.com/14?category=1038363 

 

백준 BOJ 1654번

접근 방법 생각없이 0번부터 탐색하는 burte force 방식으로 구현하면 어김없이 시간초과를 맛 볼 것이다. 이분 탐색으로 풀어야 하는 문제다. 이분 탐색( Binary Search ) 이분 탐색 알고리즘은 정렬되

edvedv.tistory.com


코드

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        int lo = 0;
        int hi = 0;
        int arr[] = new int[n];
        for(int i = 0; i < n; i++){
            arr[i] = in.nextInt();
            if(hi < arr[i]) hi = arr[i];
        }
        while(lo < hi) {
            int mid = (lo + hi)/2;
            long sum = 0;
            for(int h : arr) {
                if(h - mid > 0) sum += h-mid;
            }
            if(sum < m) hi = mid;
            else lo = mid + 1;
        }
        System.out.println(lo - 1);
    }

}

댓글