https://www.acmicpc.net/problem/2343
2343번: 기타 레슨
강토는 자신의 기타 강의 동영상을 블루레이로 만들어 판매하려고 한다. 블루레이에는 총 N개의 강의가 들어가는데, 블루레이를 녹화할 때, 강의의 순서가 바뀌면 안 된다. 순서가 뒤바뀌는 경
www.acmicpc.net
백준 - 기타 레슨 (2343번)
난이도 : Silver 1
알고리즘&자료구조 : Parametric Search, Binary Search (이진 탐색)
import sys
input = sys.stdin.readline
if __name__ == '__main__':
N, M = map(int, input().split())
size = list(map(int, input().split()))
s, e = max(size), sum(size)
while s < e:
m = (s+e)>>1
cnt = tv = 0
for v in size:
if m < tv + v:
tv = v
cnt += 1
else:
tv += v
cnt += 1
if cnt <= M:
e = m
else:
s = m+1
print(e)
Parametric Search를 활용하는 문제이다.
풀이 과정
ⓐ 최솟값 s를 가장 긴 강의 길이인 max(size)로 두고,
최댓값 e를 전체 강의 길이 합인 sum(size)로 설정한다.
ⓑ while문으로 s 보다 e 가 클 때까지 반복한다.
ⓑ-① s와 e의 중간값 m = (s+e)//2 를 기준으로,
필요한 블루레이 갯수 cnt 를 구한다.
ⓑ-② cnt가 M보다 작거나 같으면 s ~ m 으로 범위를 좁히고,
cnt가 M보다 크면 (m+1) ~ e 로 범위를 좁힌다.
ⓒ e 를 출력한다.
'Algorithm' 카테고리의 다른 글
욕심쟁이 판다 (1937번) - 백준 (BOJ) (0) | 2023.06.21 |
---|---|
광고 삽입 (72414번) - 프로그래머스 (Programmers) (0) | 2023.06.19 |
합승 택시 요금 (72413번) - 프로그래머스 (Programmers) (0) | 2023.06.17 |
k진수에서 소수 개수 구하기 (92335번) - 프로그래머스 (Programmers) (0) | 2023.06.16 |
치킨 배달 (15686번) - 백준 (BOJ) (0) | 2023.06.15 |