https://www.acmicpc.net/problem/2343
① 블루레이에 총 N개의 강의가 들어감
② 각 강의를 블루레이 내에 순서대로 담아야 함 (순서 바뀌면 X)
③ M개의 블루레이는 모두 같은 크기
🧡 가능한 블루레이 크기 중 최소 구하기
임의의 블루레이 크기를 정하여 담아 본 다음
👆 이 부분을 이진 탐색
예제 입력값으로 보면 high = 45 , low = 9
🍰 알고리즘
mid = (low + high) // 2
임의로 정한 블루레이 크기
첫 번째 강의부터 하나씩 더함
mid보다 값이 커지면 👉 필요한 블루레이 개수 + 1
블루레이 개수 < M 👉 블루레이 크기 줄임
high = mid - 1
블루레이 개수 > M 👉 블루레이 크기 늘림
low = mid + 1
n, m = map(int, input().split()) # n = 강의의 수, m = 블루레이의 수
lesson = list(map(int, input().split()))
high = sum(lesson) # 모든 강의를 더한 값
low = max(lesson) # 강의 중 길이가 가장 긴 강의
while low <= high:
sum = 0
blu_ray = 0
mid = (low + high) // 2 # 임의로 정한 블루레이 크기
for i in range(n):
if sum + lesson[i] > mid: # mid보다 커지면
sum = 0
blu_ray += 1 # 블루레이 개수 1 증가
sum += lesson[i] # 첫 번째 강의부터 하나씩 더함
if sum: # mid보다 작아서 블루레이 개수를 증가시키지 못 한 경우
blu_ray += 1
if blu_ray <= m:
high = mid - 1 # 블루레이의 크기 감소
else: # blu_ray > m
low = mid + 1 # 블루레이의 크기 증가
print(low)