https://www.acmicpc.net/problem/2343
이분탐색 문제의 해결방법은 계속 강조하지만 무엇을 탐색할 것인가?를 고민하면됩니다.
(물론 이 문제가 이분탐색인가?? 라는 것을 알기가 힘들긴 합니다..)
이 문제는 블루레이의 크기를 최소로 만들면 됩니다..
굳이 조심해야할 점은 마지막에 레쓴이 남았을 때 CD를 한장 더만들어줘야한다는 점..??
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #include <cstdio> #include <algorithm> #include <iostream> #define MAX_SIZE 100000 #define INF 1e9 using namespace std; int lesson[MAX_SIZE]; int main() { int n, c; scanf("%d %d", &n, &c); int max_lesson = 0; for(int i = 0; i < n; i++) { scanf("%d", lesson + i); max_lesson = lesson[i] > max_lesson ? lesson[i] : max_lesson; } int left = max_lesson, right = INF / c; while(left <= right) { int mid = (left + right) / 2; int sum = 0; int bluelay = 0; for(int i = 0; i < n; i++) { if(sum + lesson[i] > mid) { sum = 0; bluelay++; } sum += lesson[i]; } if(sum != 0) bluelay++; if(bluelay <= c) right = mid - 1; else left = mid + 1; } printf("%d\n", left); return 0; } | cs |
'알고리즘 > 이분 탐색' 카테고리의 다른 글
[2805] 나무 자르기 (3) | 2017.04.19 |
---|---|
[2512] 예산 (0) | 2017.04.19 |
[1654] 랜선 자르기 (0) | 2017.04.19 |
[2110] 공유기 설치 (0) | 2017.04.19 |
[1300] K번째 수 (0) | 2017.04.06 |