백준 2343번 기타 레슨

DARTZ·2022년 5월 13일
0

알고리즘

목록 보기
57/135
import sys
sys.stdin = open('input.txt', 'rt')
input = sys.stdin.readline

N, M = map(int, input().split())

videos = list(map(int, input().split()))

start = max(videos) # 0부터 시작할 필요가 없다. 일단 1개는 필수로 들어가야하니깐 제일 큰 값을 넣는다.
end = sum(videos) # 동영상 길이를 모두 더한걸 넘을 수 없으니 end는 리스트의 합
answer = 0

while start <= end: # 값이 나오면 종류
    middle = (start + end) // 2 # 이분 탐색!
    temp = 0
    count = 1 # 블루레이 카운트 1개부터 시작

    for b in videos:
        temp += b # 순서대로 더하고
        if temp > middle: # 중간 값 을 넘을경우
            count += 1 # 블루레이 추가
            temp = b # temp 초기화

    if count > M: # 카운트가 넘을 경우 블루레이 길이를 늘려도 되므로 start를 늘린다.
        start = middle + 1

    else:
        end = middle - 1 # 아닐경우 end를 줄여준다.
        answer = middle

print(answer)
profile
사람들이 비용을 지불하고 사용할 만큼 가치를 주는 서비스를 만들고 싶습니다.

0개의 댓글