문제는 이 곳 링크를 참조하길 바란다.
import heapq
def solution(jobs):
start = -1
heap = []
now = 0
answer = 0
i = 0
while i < len(jobs):
for j in jobs:
if start < j[0] <= now:
heapq.heappush(heap, [j[1], j[0]])
if len(heap) > 0:
current = heapq.heappop(heap)
start = now
now += current[0]
answer += (now - current[1])
i += 1
else:
now += 1
return answer // len(jobs)
현재 시점에서 처리할 수 있는 작업인지를 판별하는 조건은 "작업 요청시간"이 "바로 이전에 완료한 작업 시간 (start)"보다 크고 "현재 시점(now)"보다 작거나 같아야 한다. 그러므로 이 조건을 만족할 때 heap에 "작업의 소요 시간"을 기준으로 최소힙을 만들기 위해 job의 요소를 바꾸어 ["작업의 소요 시간", "작업이 요청되는 시점"] 으로 앞 뒤를 바꿔서 넣어준다.
만약 현재 처리할 수 있는 작업이 없다면, 남아 있는 작업들의 요청 시간이 아직 오지 않은 것이기 때문에 현재 시점(now)을 하나 올려준다.