FeelingXD

[백준- 2343] 기타레슨 🎸 본문

프로그래밍/문제풀이

[백준- 2343] 기타레슨 🎸

FeelingXD 2023. 12. 31. 17:48

❓ Problem

🤔 How

  1. M개에 블루레이를 모든 기타 강의 동영상을 녹화하기로 했다. 그리고 블루레이는 모두 같은 크기여야한다.
  2. 강의 순서가 변경되면안된다.(임의로 정렬할수없으며 연속으로 블루레이에 담도록해야한다.)

위의 이유로 단순 이진탐색에서 몇가지 조건이 추가된다.
mid 값(블루레이) 으로 반환하되 임시 블루레이에 담을수있는 크기중 최소 의 값이 되도록 유지해야한다.
단! 이블루레이에는 1개의 영상만 들어갈수도있다. 난이도에비해 반례가 다양하니 신경쓰여하는 부분이 많은 문제이다.

❗ Solve

import sys
input =sys.stdin.readline

def solution():
    N,M=map(int,input().split())
    li=list(map(int,input().split()))
    l=0
    max_n=0
    r=1e9
    answer=float('inf')
    while l<r:
        cnt=1
        mid=(l+r)//2+1
        tmp=0
        max_n=0
        for v in li:
            if cnt >M:
                break

            if tmp+v<=mid:
                tmp+=v
            else:
                max_n=max(max_n,tmp)
                cnt+=1
                tmp=v
        max_n=max(max_n,tmp)

        if  M<cnt:
            l=mid+1
        else:
            if M>=cnt:
                answer=min(answer,max_n)

            r=mid-1
    print(answer)

    pass
if __name__=="__main__": # 실행되는 부분
    solution()
    pass

'프로그래밍 > 문제풀이' 카테고리의 다른 글

[백준-2240] 자두나무 🍒  (0) 2024.01.12
[백준-1107] 리모컨 ✨  (0) 2024.01.11
[백준 - 14940] 쉬운 최단거리 🐢  (0) 2024.01.02
[백준 - 2293] 동전 1 🟡  (0) 2024.01.01
[백준-14501] 퇴사 👀  (0) 2023.12.30