공부, 기록

프로그래머스 디스크 컨트롤 파이썬(PYTHON) 본문

코딩

프로그래머스 디스크 컨트롤 파이썬(PYTHON)

무는빼주세요 2020. 11. 14. 13:56

문제링크 : programmers.co.kr/learn/courses/30/lessons/42627

 

코딩테스트 연습 - 디스크 컨트롤러

하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를

programmers.co.kr

 

import heapq as hq

def solution(jobs):
    lens=len(jobs)
    answer = 0
    heap = list()
    jobs.sort()
    hq.heappush(heap,jobs.pop(0))
    first = hq.heappop(heap)
    time = first[0]+first[1]
    answer = first[1]
    lasttime=first[0]+first[1]
    deleteindex=list()
    
    while True:
        if jobs:
            for i in range(len(jobs)):
                if jobs[i][0] <= time:
                    hq.heappush(heap,[jobs[i][1],jobs[i][0]])
                    deleteindex.append([jobs[i][1],jobs[i][0]])
                else:
                    break
        for i in deleteindex:
            jobs.pop(jobs.index([i[1],i[0]]))
        deleteindex=list()
        if len(heap)==0:
            time+=1
        else:
            if  lasttime==time:
                temp = hq.heappop(heap)
                answer+=time-temp[1]+temp[0]
                time+=temp[0]
                lasttime=time
            elif lasttime !=time:
                temp = hq.heappop(heap)
                answer+=temp[0]
                time+=temp[0]
                lasttime=time
        if len(jobs)==0 and len(heap)==0:
            break
    x,y = divmod(answer,lens)
    return x