디스크 컨트롤러
import heapq
def solution(jobs):
n = len(jobs)
answer = 0
jobs.sort()
cur, cost = jobs.pop(0)
ready_que = [[cost, cur]]
while ready_que :
cost, arrive = heapq.heappop(ready_que)
cur += cost
while jobs and jobs[0][0] <= cur :
arrive_, cost_ = jobs.pop(0)
heapq.heappush(ready_que, [cost_, arrive_])
answer += cur - arrive
if jobs and not ready_que :
cur, cost = jobs.pop(0)
ready_que = [[cost, cur]]
return answer // n
풀이
SJF 스케줄링 평균 반환시간을 구하는 문제다. 해결해야할 사항은 2가지
한 프로세스 작업중에 도착하는 프로세스들을
ready_que
에 넣기
ready_que
가 비었지만 처리해야할 프로세스가 남았을 경우
그리고 반환시간
작업 끝난시간 - 도착시간 = 작업 시작시간 + 작업 걸리는 시간 - 도착시간
import heapq
def solution(jobs):
n = len(jobs)
answer = 0
jobs.sort()
cur, cost = jobs.pop(0) # init 작업
ready_que = [[cost, cur]] # heapq를위해 cost -> cur 순으로 큐에 넣음
while ready_que :
cost, arrive = heapq.heappop(ready_que)
cur += cost # 현재작업이 끝나는 시간 : 현재시간 + 작업시간
while jobs and jobs[0][0] <= cur : #작업도중 들어오는 task들 ready_que에 push
arrive_, cost_ = jobs.pop(0)
heapq.heappush(ready_que, [cost_, arrive_])
answer += cur - arrive # 반환시간 계산
if jobs and not ready_que : # ready_que 비었지만 남아있는 작업 확인
cur, cost = jobs.pop(0)
ready_que = [[cost, cur]]
return answer // n