Jun's Development Journey

[BOJ] 16510번 Predictable Queue 본문

BOJ/Binary Search

[BOJ] 16510번 Predictable Queue

J_Jayce 2021. 5. 7. 16:08

문제

www.acmicpc.net/problem/16510

 

16510번: Predictable Queue

첫 번째 줄에는 혁진이가 벌여놓은 일의 개수와 일할 수 있는 시간 동안 몇 개의 일을 처리할 수 있는지 알아볼 개수를 의미하는 정수 N, M (1 ≤ N, M ≤ 200,000)이 주어진다. 두 번째 줄에는 공백으

www.acmicpc.net

풀이

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
import java.util.StringTokenizer;
import java.util.Map.*;
public class BOJ_16510 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        st = new StringTokenizer(br.readLine());
        int[] queue = new int[N];
        queue[0] = Integer.parseInt(st.nextToken());
        //부분합 구하기
        for(int i=1;i<N;i++)
            queue[i] = queue[i-1] + Integer.parseInt(st.nextToken());
        for(int i=0;i<M;i++){
            int time = Integer.parseInt(br.readLine());
            int left=0, right = N-1;
            int mid = 0;
            //이진탐색
            while(left<=right){
                mid = (left+right)/2;
                if(time>=queue[mid])
                    left = mid+1;
                else
                    right = mid-1;
            }
            sb.append(left+"\n");
        }
        System.out.println(sb);
    }
}

'BOJ > Binary Search' 카테고리의 다른 글

[BOJ] 1654 랜선 자르기  (0) 2021.03.01