문제 링크
풀이
결정문제로 바꿔 이분 탐색을 하여 풀 수 있다.
m명에게 길이가 n인 과자를 줄 수 있는지 없는지 판단하는 문제로 바꿔, 길이 n을 이분탐색을 돌리면 된다.
이렇게 풀면 O(NlogN)에 풀 수 있다.
코드
#include <cstdio>
int arr[1000006];
int main() {
int m, n; scanf("%d %d", &m, &n);
for (int i = 0; i < n; i++) {
scanf("%d", arr + i);
}
int l = 0, r = 1e9, mid;
while (l + 1 < r) {
mid = (l + r) >> 1;
int sum = 0;
for (int i = 0; i < n; i++) {
sum += (arr[i] / mid);
}
if (sum < m) r = mid;
else l = mid;
}
printf("%d", l);
}
'Algorithm > BOJ' 카테고리의 다른 글
백준[14428] 수열과 쿼리 16 (0) | 2021.10.14 |
---|---|
백준[20164] 홀수 홀릭 호석 (0) | 2021.10.14 |
백준[2239, 2580] 스도쿠 (0) | 2021.10.14 |
백준[14500] 테트로미노 (0) | 2021.10.13 |
백준[20551] Sort 마스터 배지훈의 후계자 (0) | 2021.10.11 |