import heapq
from collections import deque
def solution(jobs) :
n = len(jobs)
jobs.sort()
jobs = deque(jobs)
time = 0
ready = []
running = ()
answer = 0
while jobs or running :
while jobs and jobs[0][0] == time :
#여기서 if 를 사용했는데 같은 시점에 시작되는게 여러게 있을 수 있으므로 while로 같은 시간에 시작하는 것을 여러개 들고온다.
temp = jobs.popleft()
heapq.heappush(ready, (temp[1], temp[0]))
if running and running[2] + running[0] == time :
answer += (time - running[1])
running = ()
if not running and ready :
temp = heapq.heappop(ready)
running = (temp[0], temp[1], time)
time += 1
return answer // n
문제정리
하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 상황에서 대기시간이 가장 짧게되는 순서로 처리한 후 대기 평균시간을 구하는 문제이다.
풀이과정
time을 직접 +1식하며 직접 실제로 돌아가는 상황에 맞게 코드가 돌아가도록하고자 하였다.
실제와 같이 ready queue, running을 만들었고 ready queue를 우선순위 큐로 만들어 사용하였다.
크게 세부분으로 나눴는데
현재시간을 바탕으로 요청이 들어온지 확인 후 ready queue에 넣는다.
running을 확인하여 현재 실행이 완료되었는지 체크한다
종료되었다면 대기시간을 answer에 추가한다.
running이 비어있고 ready queue안에 요소가 존재한다면 running에 실행할 요소를 추가해준다.
풀이 후
비슷하게 푼사람도 있고 다르게 푼사람도 있는데 크게 다르지 않았다.