22254 공정 컨설턴트 호석

정민용·2024년 3월 21일

백준

목록 보기
271/286

import sys, heapq

n, x = map(int, sys.stdin.readline().split())
item = list(map(int, sys.stdin.readline().split()))

start, end = 1, n   # 공정은 1개 이상 n개 이하로 설치된다.
min_k = n           # 최소 공정 라인 개수

while start <= end:
    mid = (start + end) // 2

    # 공정 라인의 개수(mid) 만큼 힙에 들어간다.
    line = []
    for i in item[:mid]:
        heapq.heappush(line, i)

    index = mid
    time = 0
    while line:
        t = heapq.heappop(line)
        time = max(time, t)     # 공정의 최대 시간

        if index == n:
            continue
        heapq.heappush(line, t+item[index])
        # 가장 사용 시간이 적은 공정에 배정된다.
        index += 1

    # 시간안에 공정이 끝난다면 공정 라인을 최소로 맞춘다.
    if time <= x:
        min_k = min(min_k, mid)
        end = mid - 1
    else:
        start = mid + 1

sys.stdout.write(str(min_k))

22254 공정 컨설턴트 호석

0개의 댓글