알고리즘 - 디스크 컨트롤러

안 형준·2022년 1월 30일
0

Algo

목록 보기
1/3

디스크 컨트롤러

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
profile
물리학과 졸업/ 인공지능 개발자로의 한 걸음

0개의 댓글