처음에 문제 잘못 읽고 이해해서 한참 헤맸다..
문제를 잘 읽어보니 왜 내가 실행했을 때 틀리는지 깨달은..
앞으론 문제를 꼼꼼히 읽자!
from queue import PriorityQueue
def solution(jobs):
answer = 0
q = PriorityQueue()
n = len(jobs)
# 현재 시점
cur_t = 0
# 현재 쌓인 작업소요시간
cur_c = 0
while 1:
temp = []
# 현재 시점보다 작업 요청시간이 작거나 같으면
for t,c in jobs:
if t <= cur_t:
# 작업소요시간(cost)가 작은 순대로 우선순위큐
q.put((c,t))
else:
temp.append([t,c])
# jobs 갱신(현재 q에 들어가지 않은 것들로)
jobs = temp
# 더 이상 작업할 것 없음
if q.empty() == True and jobs == []:
break
# 작업물은 남았지만 현재 시점에서 작업할 수 있는 work 없음
if q.empty() == True:
cur_t += 1
else:
work_c, work_t = q.get()
cur_t += work_c
cur_c += cur_t - work_t
return cur_c//n
현재 시점에서 처리 가능한 작업목록 우선순위큐(q)에 넣기
(이 때, 처리 시간 기준으로 오름차순 정렬)
현재 시점에서 처리 가능하지 않은 작업목록만 따로 모아 jobs에 갱신
현재 시점에서 처리 가능한 작업목록이 있으면 가장 우선순위가 높은 q를 꺼내작업하고, 현재 시점과 현재 처리 시간 갱신
현재 시점에서 처리 가능한 작업목록이 없으면 현재 시점 +1 해주기
현재 시점에서 처리 가능한 작업목록도 없고, 남은 처리 목록(jobs)도 없으면 break
쌓인 처리 시간 (cur_c)을 작업 갯수로 나누어 평균내서 return