Programming/Algorithm

[Algorithm] C++ 뮤직비디오(이분검색)

100winone 2019. 12. 23. 14:52

입력설명

첫 줄에 한 줄에 자연수 N(3<=N<=1,000,000)과 M이 주어집니다. 두 번째 줄에 N개의 수가 공백을 사이에 두고 주어집니다.

첫째 줄에 자연수 N(1≤N≤1,000), M(1≤M≤N)이 주어진다. 다음 줄에는 라이브에서 부른 순서대로 부른 곡의 길이가 분 단위로(자연수) 주어진다. 부른 곡의 길이는 10,000분을 넘지 않는다고 가정하자.


출력설명

첫 줄에 정렬 후 M의 값의 위치 번호를 출력한다

첫 번째 줄부터 DVD의 최소 용량 크기를 출력하세요

 

입력예제

9 3 

1 2 3 4 5 6 7 8 9

 

출력예제

17

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<algorithm>

using namespace std;
int a[1001], n;

int Count(int s) {
	int i, cnt = 1, sum = 0;
	for (i = 1; i <= n; i++) {
		if (sum + a[i] > s) {
			cnt++;
			sum = a[i];
		}
		else {
			sum = sum + a[i];
		}
	}
	return cnt;
}

int main() {
	int m, i, lt = 1, rt = 0, mid, res;
	scanf("%d %d", &n, &m);
	for (i = 1; i <= n; i++) {
		scanf("%d", &a[i]);
		rt = rt + a[i];
	}
	while (lt <= rt) {
		mid = (lt + rt) / 2;
		if (Count(mid) <= m) {
			res = mid;
			rt = mid - 1;
		}
		else {
			lt = mid + 1;
		}
	}
	printf("%d\n", res);
	return 0;
}