백준 2343 자바(이진탐색)

정호윤·2023년 3월 12일

자바

목록 보기
29/46

반드시 순서대로 넣어야하는 이진탐색이다.

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이 최소값이다.순서대로 넣을 때는 한번 더 검사해줘야 하나 보다

profile
개발자로 취직을 희망합니다.

0개의 댓글