알고리즘

백준 15810번 풍선 공장 (JAVA)

박카스마시며코딩 2023. 12. 26. 20:45

https://www.acmicpc.net/problem/15810

 

15810번: 풍선 공장

1, 2, 3번 스태프가 각각 5분, 7분, 3분씩 걸린다면 3분이 지났을 때 3번 스태프가 1개, 5분에 1번 스태프가 1개, 6분에 3번 스태프가 1개를, 7분에 2번 스태프가 1개를, 9분에 3번 스태프가 1개를, 10분에

www.acmicpc.net

 

저는 이분탐색을 통해 문제를 풀었습니다

이분탐색을 사용하지 않으면 각 시간대 별로 되는지를 확인해야하기 때문에 1_000_000 * 1_000_000으로 시간초과가 나올 수 있습니다.그래서 이분탐색을 통해 해당 시간까지 m개를 만들 수 있는지를 확인하여 만들 수 있다면 end를 줄이고, 없다면 start를 늘려 문제를 풀었습니다.

 

package BOJ.binarysearch;

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

public class BOJ_15810_2 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        int[] needTime = new int[n];
        st = new StringTokenizer(br.readLine());
        for(int i = 0 ; i < n ; i++){
            needTime[i] = Integer.parseInt(st.nextToken());
        }
        long result = cal(needTime,n,m);
        System.out.println(result);
    }
    private static final long INF = 1_000_000L * 1_000_000L;
    private static long cal(int[] needTime, int n, int m) {
        long start = 0;
        long end = INF;
        long result = INF;
        while(start <= end){
            long mid = (start + end) / 2;
            if(check(mid,needTime,n,m)){
                result = mid;
                end = mid - 1;
            }else{
                start = mid + 1;
            }
        }
        return result;
    }

    private static boolean check(long value, int[] needTime, int n, int m) {
        long cnt = 0;
        for(int time : needTime){
            cnt += value / time;
        }
        if(cnt < m){
            return false;
        }else{
            return true;
        }
    }
}

'알고리즘' 카테고리의 다른 글

백준 2169번 로봇 조종하기 (JAVA)  (0) 2023.12.28
백준 10773번 제로 (JAVA)  (1) 2023.12.27
백준 9465번 스티커 (JAVA)  (1) 2023.12.25
백준 2776번 암기왕 (JAVA)  (0) 2023.12.24
백준 3187번 양치기 꿍 (JAVA)  (1) 2023.12.23