
M개의 블루레이에 나눠 담을 때, 가능한 블루레이 용량 중 최솟값을 구하라.
이 문제는 **정답(최소 블루레이 크기)**를 이분 탐색으로 찾는 매개변수 탐색(Parametric Search) 문제이다.
블루레이 용량 (capacity)
범위:
start = max(lecture) → 강의를 딱 한개만 넣는 경우 가장 긴 길이의 비디오가 들어갈때 고려end = sum(lecture) → 모든 강의를 한 블루레이에 넣는 경우def check(capacity):
count = 1
total = 0
for lec in lecture:
if total + lec > capacity:
count += 1
total = lec
else:
total += lec
return count <= m
start = max(lecture)
end = sum(lecture)
result = end
while start <= end:
mid = (start + end) // 2
if check(mid):
result = mid # 정답 후보 저장
end = mid - 1 # 더 작은 용량도 가능한지 확인
else:
start = mid + 1 # 너무 작음 → 더 큰 용량으로
print(result)
n, m = map(int, input().split())
lecture = list(map(int, input().split()))
def check(capacity):
count = 1
total = 0
for lec in lecture:
if total + lec > capacity:
count += 1
total = lec
else:
total += lec
return count <= m
start = max(lecture)
end = sum(lecture)
result = end
while start <= end:
mid = (start + end) // 2
if check(mid):
result = mid
end = mid - 1
else:
start = mid + 1
print(result)
def add_video(capacity,what_video,step):
if step == m+1 :
max_size = max(max_size,capacity)
return
count = 0
sum_video = 0
while True :
if sum_video + lecture[count+what_video+1] > avg_size :
add_video(sum_video+lecture[count+what_video+1],what_video+count+1,step+1)
add_video(sum_video,what_video+count,step+1)
else :
sum_video += lecture[count+what_video]
✅ 각 블루레이에 들어갈 원소의 합이 비슷해야 최적 결과라고 생각함
✅ "최대값 포함 여부가 핵심"
✅ "1654랑 비슷한 느낌"
이 문제는 "블루레이 용량"이라는 정답 후보를 잡고, 그 값이 가능한지를 검사해나가는 매개변수 이분 탐색 문제다! 🎯