코드
n,m = map(int, input().split())
lecture = [*map(int, input().split())]
# 가장 큰 경우는 1개에 다 때려박았을 때의 시간
# 가장 작은 경우는 1개씩만 넣었을 때의 시간, 블루레이는 같은 크기여야하므로 가장 큰 값을 가짐
s,e = max(lecture), sum(lecture)
while s <= e:
mid = (s+e)//2
cnt, temp = 1, 0
for i in lecture: # 순서대로 블루레이에 넣는 과정
if temp + i > mid: # mid보다 클 경우 개수 증가 및 시간 초기화
cnt += 1
temp = 0
temp += i
if cnt > m: s = mid + 1 # 개수가 넣으려는 블루레이보다 많을 경우, 블루레이 용량을 늘려야함
else: e = mid - 1 # 그 외에는 용량을 줄임
print(s)
어떤 걸 변수로 두고 찾아야하는지 많이 헤맸던 문제. 그래도 문제를 차근차근 읽고 설계하면 해결할 수 있다는 걸 다시금 깨달았다. 여유를 가지고 해결방법을 탐색하는 게 중요하다는 걸 새겨둬야겠다.
'백준' 카테고리의 다른 글
[백준] 9996번 한국이 그리울 땐 서버에 접속하지 파이썬 코드 (1) | 2024.04.04 |
---|---|
[백준] 2668번 숫자고르기 파이썬 코드 (0) | 2024.03.07 |
[백준] 12891번 DNA 비밀번호 파이썬 코드 (1) | 2024.03.05 |
[백준] 21921번 블로그 파이썬 코드 (0) | 2024.03.05 |
[백준] 2559번 수열 파이썬 코드 (0) | 2024.03.04 |