백준 2343번 binary search

changho Youn·2023년 11월 14일
0

출처 :https://www.acmicpc.net/problem/2343


소스코드

package baekjoon;

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

public class Baek2343 {
    static int n, m;
    static int [] videos;
    static int shortTime, longTime;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());
        videos = new int[n];
        st = new StringTokenizer(br.readLine());

        for (int i = 0; i < n; i++) {
            videos[i] = Integer.parseInt(st.nextToken());
            longTime+=videos[i];
            shortTime = Math.max(shortTime, videos[i]);
        }
        System.out.println(biSearch(shortTime,longTime));
    }
    static int biSearch(int shortTime, int longTime) {
        while(shortTime<=longTime) {
            int mid = (shortTime + longTime) / 2; // 블루레이 하나의 총시간?
            int count = 1;
            int sum = 0;
            for (int i = 0; i < n; i++) {
                sum+=videos[i];
                if (sum > mid) {
                    count++;
                    sum = videos[i];
                }
            }
            if (count <= m) {
                longTime = mid-1;
            }else{
                shortTime = mid+1;
            }
        }
        return shortTime;
    }
}

느낀점 :
Binary Search를 잘이해하고 있다고 생각을 했지만, 문제를 풀이하는 과정에서 꽤나 어려움을 겪었다. 핵심은 mid값을 블루레이 하나의 시간으로 두고 그 값에 따라 count갯수를 체크하여 블루레이 하나의 시간을 조절하는 것이다.

profile
BackEnd Developer ChangDDAO입니다.🐌

0개의 댓글

관련 채용 정보