https://www.acmicpc.net/problem/2343
2343번: 기타 레슨
강토는 자신의 기타 레슨 동영상을 블루레이로 만들어 판매하려고 한다. 블루레이에는 총 N개의 레슨이 들어가는데, 블루레이를 녹화할 때, 레슨의 순서가 바뀌면 안된다. 순서가 뒤바뀌는 경우에는 레슨의 흐름이 끊겨, 학생들이 대혼란에 빠질 수 있기 때문이다. 즉, i번 레슨과 j번 레슨을 같은 블루레이에 녹화하려면 i와 j 사이의 모든 레슨도 같은 블루레이에 녹화해야 한다. 강토는 이 블루레이가 얼마나 팔릴지 아직 알 수 없기 때문에, 블루레이의 개수를 가급
www.acmicpc.net
길이(mid)를 정해두고, 만약 이 길이를 넘거 같아지면 새로운 블루레이 cd에 길이를 저장하는 방식으로 풀었습니다.
#include <iostream>
#include <algorithm>
#define MAX_SIZE 100000
using namespace std;
int main(){
int n, m;
int arr[MAX_SIZE] = {0};
int left = 0, right = 0;
cin >> n >> m;
for(int i = 0; i < n; i++){
scanf("%d", &arr[i]);
left = max(left,arr[i]);
}
right = 1000000000/m;
while(left +1< right){
int mid = (right + left) /2;
int sum = 0, cnt = 0;
for(int i = 0; i < n; i++){
if(sum + arr[i]>= mid){
cnt++;
sum = 0;
}
sum += arr[i];
}
if(sum!=0) cnt++;
if(cnt <= m) right = mid;
else left = mid;
}
cout << left;
}
반응형
'프로그래밍 > 문제풀이' 카테고리의 다른 글
[bfs] 백준 2583 영역 구하기 (0) | 2019.04.29 |
---|---|
[이분 탐색] 백준 2110 공유기 설치 (0) | 2019.04.08 |
[이분 탐색] 백준 10816 숫자 카드2 (0) | 2019.04.07 |
[bfs] 백준 1963 소수 경로 (0) | 2019.04.01 |
[bfs] 백준 2589 보물섬 (0) | 2019.04.01 |