https://programmers.co.kr/learn/courses/30/lessons/42627
- 변수
i
를0
으로 초기화시켜 생성한 후 전체jobs
의 길이와 같아질 때까지 반복시킨다.
job
의 시작시점 값이start
<job[0]
<=now
를 만족하는 경우heap
에job
의 작업크기, 작업 시작 시점 순으로 푸시해준다.
heap
에 들어갈때 순서는 작업크기를 기준으로 들어가기 때문.- 그 후 나머지 알고리즘을 통해 전체 작업 소요 시간을 구해주는데 로직은
실제 작업시간
+작업 시작하기 전 대기시간
을 합한 값과 같다- 작업을 하지 않는 시간이 있을 경우
now
변수값에 1을 더해준다.- 마지막에
jobs
의 길이로 나눠준 후 문제 설명에 따라 소수점 이하의 수는 버려준다.- 아래 그림은 이해를 쉽게 하기 위해 그려봤습니다.
import heapq
def solution(jobs):
answer, now, i = 0,0,0
start = -1
heap = []
while i<len(jobs):
for job in jobs:
if start < job[0] <= now:
heapq.heappush(heap, [job[1], job[0]])
if len(heap)>0:
current = heapq.heappop(heap)
start = now
now += current[0]
answer += (now-current[1])
i += 1
else:
now += 1
return int(answer/len(jobs))