https://www.acmicpc.net/problem/2343
기타 레슨 강의 만들어서 블루레이로 배포하려는데 강의 순서 지키면서 m개이 블루레이에 나눠서 담으려고 할 때 각 블루레이의 길이가 최소가 되도록 하는 문제이다. 모든 블루레이 길이는 같아야한다.
바로 바이너리 서치로 접근했다.
n, m = map(int, input().split())
# 이진탐색인듯
lectures = list(map(int, input().split()))
start = max(lectures)
end = sum(lectures)
answer = 0
while start <= end:
mid = (start + end) // 2
count = 1
sum = 0
for l in lectures:
if sum + l > mid:
count += 1
sum = 0
sum += l
if count > m:
start = mid + 1
else:
answer = mid
end = mid - 1
print(answer)
만족하는 최소값을 찾아야하기에 end쪽에 <= 조건을 주었고 거기에 answer를 업데이트 하는 로직도 넣어서 해결했다.