백준 2512 예산 (Java, 자바)

jonghyukLee·2023년 5월 29일
0

이번에 풀어본 문제는
백준 2512번 예산 입니다.

📕 문제 링크

❗️코드

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

public class Main {
    static long [] requests;
    static long budget;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        requests = new long[N];
        long end = Long.MIN_VALUE;
        for (int i = 0; i < N; i++) {
            requests[i] = Integer.parseInt(st.nextToken());
            end = Math.max(end, requests[i]);
        }
        budget = Integer.parseInt(br.readLine());

        long start = 0L;
        long answer = 0L;
        while (start <= end) {
            long mid = (start + end) / 2;
            long result = calc(mid);

            if (result > budget) end = mid - 1;
            else {
                answer = Math.max(answer, mid);
                start = mid + 1;
            }
        }
        System.out.print(answer);
    }
    static long calc(long max) {
        long total = 0L;
        for (long req: requests) total += Math.min(req, max);
        return total;
    }
}

📝 풀이

예산을 분배할 수 있는 최댓값을 구하는 문제입니다.
이분탐색을 사용하여 가능한 경우의 수를 answer과 누적 비교해서, 가장 큰 값을 마지막에 출력해주면 해결할 수 있습니다.

profile
머무르지 않기!

0개의 댓글