백준 2512 java : 이분탐색

magicdrill·2025년 10월 30일

백준 문제풀이

목록 보기
663/673

백준 2512 java : 이분탐색

import java.util.Arrays;
import java.util.Scanner;

public class bj2512 {
    static int N, M;
    static int [] provinces;

    public static void main(String[] args) {
        inputData();
        System.out.println(findAnswer());
    }

    public static void inputData(){
        Scanner sc = new Scanner(System.in);
        int i;

        N = sc.nextInt();//지방 수
        provinces = new int[N];
        for(i = 0; i < N; i++){
            provinces[i] = sc.nextInt();
        }
        M = sc.nextInt();//국가 예산

        sc.close();
    }

    public static int findAnswer(){
        int max = 0;
        long sum = 0;
        int left, right, answer;

        for (int x : provinces) {
            max = Math.max(max, x);
            sum += x;
        }
        if (sum <= M) {
            return max;
        }

        left = 0;
        right = max;
        answer = 0;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            long total = 0;

            for (int x : provinces) {
                total += (Math.min(x, mid));
                if (total > M){
                    break;
                }
            }

            if (total <= M) {
                answer = mid;
                left = mid + 1;
            }
            else {
                right = mid - 1;
            }
        }

        return answer;
    }
}

0개의 댓글