LEVEL3/디스크 컨트롤러

Q·2021년 8월 16일
0

문제 설명

문제는 이 곳 링크를 참조하길 바란다.


전체 코드

import heapq

def solution(jobs):
    start = -1
    heap = []
    now = 0
    answer = 0

    i = 0
    while i < len(jobs):
        for j in jobs:
            if start < j[0] <= now:
                heapq.heappush(heap, [j[1], j[0]])
        if len(heap) > 0:
            current = heapq.heappop(heap)
            start = now
            now += current[0]
            answer += (now - current[1])
            i += 1
        else:
            now += 1
    
    return answer // len(jobs)

해결 방법

현재 시점에서 처리할 수 있는 작업인지를 판별하는 조건은 "작업 요청시간"이 "바로 이전에 완료한 작업 시간 (start)"보다 크고 "현재 시점(now)"보다 작거나 같아야 한다. 그러므로 이 조건을 만족할 때 heap에 "작업의 소요 시간"을 기준으로 최소힙을 만들기 위해 job의 요소를 바꾸어 ["작업의 소요 시간", "작업이 요청되는 시점"] 으로 앞 뒤를 바꿔서 넣어준다.

만약 현재 처리할 수 있는 작업이 없다면, 남아 있는 작업들의 요청 시간이 아직 오지 않은 것이기 때문에 현재 시점(now)을 하나 올려준다.

profile
Data Engineer

0개의 댓글

관련 채용 정보