from heapq import heappush as hpush
from heapq import heappop as hpop
def solution(jobs):
curr_time = 0
answer = 0
N = len(jobs)
jobs.sort()
q =[]
hpush(q, [0, jobs.pop(0)]) # 첫번째 작업은 가장 우선순위가 높다.
# [우선순위(=작업 소요시간), 작업] 을 push
while q:
req_time, proc_time = hpop(q)[1]
if req_time < curr_time: # 처리 중에 들어온 요청이라면
curr_time += proc_time
else: # idle에서 들어온 요청이라면
curr_time = req_time + proc_time
answer += curr_time - req_time
while True: # 우선순위는 여기서 정한다.
try: # jobs[0]으로 접근 불가능하다면 except로 빠짐
q_req_time, q_proc_time = jobs[0]
if q_req_time < curr_time or not q:
# 처리 중에 들어온 작업에 대해 우선순위를 매긴다.
# 만약 대기열이 비었다면 처리 이후 들어온 요청 중
# 가장 급한(빠른) 요청을 대기열에 넣는다.
hpush(q, [q_proc_time, jobs.pop(0)])
else:
break
except:
break
answer //= N
return answer