문제 설명

Untitled

Untitled

문제 분석

Untitled

Untitled

Untitled

Untitled

슈도코드

Untitled

구현

public class 블루레이_만들기_2343 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int N = scan.nextInt();
        int M = scan.nextInt();
        int[] lessons = new int[N];
        int start = 0;
        int end = 0;
        for (int i = 0; i < N; i++) {
            lessons[i] = scan.nextInt();
            if (start < lessons[i]) {
                start = lessons[i]; // 레슨 최댓값을 시작 인덱스로 저장
                end += lessons[i]; // 모든 레슨의 총합을 종료 인덱스로 저장
            }
        }

        while (start <= end) {
            int middle = (start + end) / 2;
            int sum = 0;
            int count = 0;

            // middle값으로 모든 레슨을 저장할 수 있는지 확인
            for (int i = 0; i < N; i++) {
                if (sum + lessons[i] > middle) {
                    count++;
                    sum = 0;
                }
                sum += lessons[i];
            }

            // 탐색 후 sum이 0이 아니면 블루레이가 1개 더 필요
            if (sum != 0) {
                count++;
            }

            if (count > M) {
                start = middle + 1;
            } else {
                end = middle - 1;
            }
        }

        System.out.println(start);
    }
}