Code/Python

[Python] 백준 2343번 기타 레슨

ki1111m2 2023. 10. 5. 21:05

이진 탐색을 이용한 문제

문제 해석이 너무 어렵다..;;

# 기타 레슨
# 첫째 줄에 강의의 수 N (1 ≤ N ≤ 100,000)과 블루레이의 개수 M (1 ≤ M ≤ N)이 주어진다. 다음 줄에는 강토의 기타 강의의 길이가 강의 순서대로 분 단위로(자연수)로 주어진다.
# 첫째 줄에 가능한 블루레이 크기중 최소를 출력한다.

n, m = map(int, input().split())
A = list(map(int, input().split()))
start = 0
end = 0
for i in A:
    if start < i:
        start = i
    end += i

while start <= end:
    mid = (start + end) // 2
    sum = 0
    cnt = 0
    for i in range(n):
        if sum + A[i] > mid:
            # 블루레이 1개 증가
            cnt += 1
            sum = 0
        sum += A[i]
    if sum != 0:
        cnt += 1
    if cnt > m:
        start = mid + 1
    else:
        end = mid - 1

print(start)

'Code > Python' 카테고리의 다른 글

[Python] 백준 11047번 동전 0  (0) 2023.10.07
[Python] 백준 1300번 K번째 수  (1) 2023.10.06
[Python] 백준 1920번 수 찾기  (0) 2023.10.05
[Python] 백준 1167번 트리의 지름  (0) 2023.10.05
[Python] 백준 2178번 미로 탐색  (1) 2023.10.05