Competition/Baekjoon

[백준] 2805번 자바 나무자르기

bisi 2020. 3. 29. 11:42
문제 출처 

https://www.acmicpc.net/problem/2805

 

2805번: 나무 자르기

문제 상근이는 나무 M미터가 필요하다. 근처에 나무를 구입할 곳이 모두 망해버렸기 때문에, 정부에 벌목 허가를 요청했다. 정부는 상근이네 집 근처의 나무 한 줄에 대한 벌목 허가를 내주었고, 상근이는 새로 구입한 목재절단기를 이용해서 나무를 구할것이다. 목재절단기는 다음과 같이 동작한다. 먼저, 상근이는 절단기에 높이 H를 지정해야 한다. 높이를 지정하면 톱날이 땅으로부터 H미터 위로 올라간다. 그 다음, 한 줄에 연속해있는 나무를 모두 절단해버린다. 따

www.acmicpc.net

 

 

 

접근 방식 및 풀이

- 나무길이에 대한 높이를 계산할때 long타입 지정

- mid에서 +1해 가는 방식이 아니라 이분탐색을 통해 진행.

 

 

 

소스 코드 
import java.util.Arrays;
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[] arr = new int[n];
        for (int i = 0; i <n ; i++) {
            arr[i] = sc.nextInt();
        }

        int max = 0;
        Arrays.sort(arr);

        int left =1;
        int right =arr[n-1];
        long height =0;
        int mid =0;
        int ans=0;
        while(left <= right){

            height =0;
            mid =(left+right)/2;

            for (int i = 0; i <n ; i++) {
                if(arr[i]>=mid) {
                    height += (arr[i] -mid);
                }
            }
            
            if(height >= m){

                left = mid + 1;
            }else  if(height < m){
                right = mid-1;

            }




        }
        System.out.println(right);



    }
}

 

 

 

 

결과 

 

'Competition > Baekjoon' 카테고리의 다른 글

[백준] 11662번 자바 민호와 강호  (0) 2020.03.29
[백준] 1517번 자바 버블정렬  (0) 2020.03.29
[백준] 11724번 연결요소 구하기  (0) 2020.03.29