Haribo ML, AI, MATH, Algorithm

디스크 컨트롤러

2021-01-24
Haribo

디스크 컨트롤러

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

Similar Posts

이전 포스트 가장 먼 노드

다음 포스트 섬 연결하기

Comments