디스크 컨트롤러

Seogyu Gim·2021년 1월 7일
0

코딩테스트

목록 보기
47/47
import heapq

def solution(jobs):
    
    # 현재시간, 이전작업종료시간, 큐
    time, end, q = 0, -1, []
    # 완료된 작업물 수
    count = 0
    # 리턴값
    answer = 0
    
    # 인덱스 에러 방지
    while count < len(jobs):
        
        for job in jobs: # 작업물 리스트에서
            if end < job[0] <= time: # 작업물요청시간이 이전작업물종료시간과 현재시간 사이면
                answer += (time - job[0]) # 현재시간-요청시간을 answer에 더한다
                heapq.heappush(q, job[1]) # 소요시간을 큐에 넣는다

        if len(q) > 0: # 큐에 작업물이 있으면
            answer += len(q) * q[0] # 이번 작업물이 끝날때까지 시간이 나머지 작업물들에게는 대기시간이므로 곱해서 더해준다
            end = time # 이전작업물종료시간을 현재시간으로 바꾼다
            time += heapq.heappop(q) # 현재시간에 현재 작업물소요시간을 더한다
            count += 1 # 완료된 작업물 수를 1 증가시킨다
        else:
            time += 1 # 작업물이 없으면 1초 추가

    return answer // len(jobs)
profile
의미 있는 일을 하고싶은 개발자

0개의 댓글