int main(){
//freopen("input.txt","rt",stdin);
int n,m;
cin>>n>>m;
int k, sum=0;
vector<int> numbers;
for(int i=0; i<n; i++){
cin>>k;
sum+=k;
numbers.push_back(k);
}
int left =1, right=sum;
int answer=sum;
int cnt=0;
while(left<=right){
int middle = (left+right)/2;
sum=0;
cnt=1;
for(int i=0; i<numbers.size();i++){
sum+=numbers[i];
if(sum>middle){
cnt++;
sum=numbers[i];
}
}
if(cnt<=m){
if(middle<answer){
answer=middle;
}
right = middle-1;
}
if(cnt>m){
left = middle+1;
}
}
cout<<answer;
return 0;
}
이분검색을 통해서 적합한 길이를 찾는 문제였는데, 풀고나니까 간단한데 풀이 방법을 생각 못해서 강의를 참고했다.
코드 구현 자체에서도 많이 헤매었다. 인덱스를 다루는 것에 익숙해질 필요가 있다.
굿굿, 프로그래머스 "징검다리 건너기" 문제 추천 합니당