[백준] 2343번 - 기타 레슨

yerimstar·2021년 9월 16일
1

이분탐색

목록 보기
8/10

아이디어

최대 기타 강의 길이보다 mid값이 작은 경우
-> start값을 mid+1값으로 수정하고 넘어가도록 하였다
나머지 부분은 일반적인 이진탐색과 동일했다.

코드

# 기타 레슨
import sys
def binary(start,end,bluray,M):
    result = []
    while (start <= end):
        mid = (start + end) // 2
        num = 0
        sum = 0

        if mid < max(bluray):  # 최대 기타 강의 길이보다 mid값이 작은 경우 -> 담을 수 없음
            start = mid + 1
            continue

        for b in bluray:
            if sum + b <= mid:
                sum += b
            else:
                sum = b
                num += 1

        if num < M:
            result.append(mid)
            end = mid - 1
        else:
            start = mid + 1
    return result
    
N,M = map(int,sys.stdin.readline().split())
bluray = list(map(int,sys.stdin.readline().split()))
start = sum(bluray)//M
end = sum(bluray)
result = binary(start,end,bluray,M)
print(min(result))
profile
백엔드 개발자

0개의 댓글

관련 채용 정보