ALGORITHM/BOJ

[BOJ] 2343번 기타 레슨 (C++)

yegyeom 2021. 12. 20. 00:06

문제 (https://www.acmicpc.net/problem/2343)

 

2343번: 기타 레슨

강토는 자신의 기타 강의 동영상을 블루레이로 만들어 판매하려고 한다. 블루레이에는 총 N개의 강의가 들어가는데, 블루레이를 녹화할 때, 강의의 순서가 바뀌면 안 된다. 순서가 뒤바뀌는 경

www.acmicpc.net

실수했던 점!

- ans 초기화할 때 값은 10,000이 아닌 1,000,000,000으로 해야 함

- 블루레이의 개수가 꼭 M일 필요 없음

- cnt 초기화를 1로 해두면 편하다... 많이....

- M <= N이므로 mid 값보다 긴 강의가 있을 땐 cnt = n + 1로 설정하고 break 한다 => 모든 강의가 들어가지 않는 것이므로 mid 값이 커지도록 한다


[소스코드]

/*
BOJ 2343번: 기타 레슨
2021-12-19
Binary Search
*/
#include <iostream>
using namespace std;
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n, m, num, ans = 1000000000;
int start, end, mid, sum, cnt;
cin >> n >> m;
int arr[n];
for(int i = 0 ; i < n ; i++) {
cin >> arr[i];
sum += arr[i];
}
start = 1;
end = sum;
while(start <= end) {
cnt = 1;
sum = 0;
mid = (start + end) / 2;
for(int i = 0 ; i < n ; i++) {
if(arr[i] > mid) { // 모든 강의가 들어가야 함
cnt = n + 1; // M <= N (cnt는 무조건 M보다 크게 됨)
break;
}
sum += arr[i];
if(sum > mid){
cnt++;
sum = arr[i];
}
}
if(cnt <= m) {
ans = min(ans, mid);
end = mid - 1;
}
else {
start = mid + 1;
}
}
cout << ans;
return 0;
}
view raw 2343.cpp hosted with ❤ by GitHub

'ALGORITHM > BOJ' 카테고리의 다른 글

[BOJ] 1477번 휴게소 세우기 (C++)  (0) 2021.12.21
[BOJ] 2776번 암기왕 (C++)  (0) 2021.12.20
[BOJ] 10816번 숫자 카드 2 (C++)  (0) 2021.12.19
[BOJ] 1654번 랜선 자르기 (C++)  (0) 2021.12.19
[BOJ] 2805번 나무 자르기 (C++)  (0) 2021.12.19