백준 2343 기타 레슨

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

이분탐색 문제입니다. 블루레이 크기를 기준으로 m개 이하의 블루레이를 만들 수 있는지 확인하는 방식으로 탐색하였습니다.

#include<bits/stdc++.h>
using namespace std;
const int SZ=100005;
int arr[SZ];
int n,m;
bool bi_search(int t){
	int grp=0, ans=0;
	for(int i=1;i<=n+1;i++){
		if(arr[i]>t) return false;
		if(grp+arr[i]>t || i==n+1){
			ans++;
			grp=arr[i];
		}
		else grp+=arr[i];
	}
	return ans<=m;
}
int main(void){
	ios::sync_with_stdio(false); cin.tie(NULL);
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>arr[i];
	int l=0, r=(int)1e9+5;
	int ans=r;
	while(l<=r){
		int mm=(l+r)/2;
		if(bi_search(mm)){
			ans=min(ans,mm);
			r=mm-1;
		}
		else l=mm+1;
	}
	cout<<ans;
	return 0;
}