디스크 컨트롤러
문제 파악
작업 스케줄링 문제로, 각 작업의 요청 시간과 실행 시간을 고려하여 디스크 컨트롤러의 작업 처리 순서를 결정해야 하는것이 목표
접근 방법
우선순위 큐를 활용하여 작업들을 관리하고, 현재 시간과 작업을 효율적으로 관리하는 방식으로 접근.
- 주어진 작업 리스트를 요청시간 기준으로 정렬.
- 현재 시간 이하에 요청된 작업들을 우선순위 큐에 추가.
- 우선순위 큐에서 작업을 꺼내 현재 시간을 갱신하고, 작업의 대기시간과 실행시간을 기록한다.
- 우선순위 큐가 비어있을 경우, 다음 작업의 요청시간으로 갱신한다.
- 모든 작업을 처리하고, 실행시간의 평균을 계산하여 반환한다.
코드 구현
from heapq import heappop, heappush
def solution(jobs):
jobs.sort()
cur_time, completed_job, results = 0, 0, []
idx = 0
pq = []
while completed_job < len(jobs):
while idx < len(jobs) and jobs[idx][0] <= cur_time:
heappush(pq, (jobs[idx][1], jobs[idx][0]))
idx += 1
if pq:
duration, start = heappop(pq)
cur_time += duration
results.append(cur_time - start)
completed_job += 1
else:
cur_time = jobs[idx][0]
return sum(results) // len(jobs)
배우게 된 점
- 작업 스케줄링 문제를 효율적으로 해결하기 위해 우선순위 큐를 사용하는 방법을 배웠다.
Leave a comment