
반드시 순서대로 넣어야하는 이진탐색이다.
import java.util.*;
import java.io.*;
class Main{
public static void main(String[] args) throws IOException{
Scanner sc = new Scanner(System.in);
int lesson = sc.nextInt();
int video_n = sc.nextInt();
int[] video=new int[lesson];
for(int i=0;i<lesson;i++){
video[i] = sc.nextInt();
}
int sol = binarySearch(lesson,video_n,video);
System.out.println(sol);
}
public static int binarySearch(int lesson,int video_n,int[] video){
int lo=0;
int hi=0;
int mid=0;
for(int i=0;i<lesson;i++){
if(video[i]>lo) lo=video[i];
hi = hi+video[i];
}
while(hi>=lo){ // 애먹은 부분
int count=0;
int sum=0;
mid=(lo+hi)/2;
for(int i=0;i<lesson;i++){
if(sum+video[i]>mid){
sum=0;
count++;
}
sum = sum+video[i];
}
if(sum!=0) count++;
if(count>video_n) lo=mid+1;
else hi=mid-1;
}
return lo;
}
}
while(hi>=lo){
9 3
1 2 3 4 5 6 7 8 9
=을 안 붙이면 16이 나오고 붙이면 17이 나온다.
16은 담을수 없으며 17은 담을수 있으니 17이 최소값이다.순서대로 넣을 때는 한번 더 검사해줘야 하나 보다