less than 1 minute read

문제 파악

작업 스케줄링 문제로, 각 작업의 요청 시간과 실행 시간을 고려하여 디스크 컨트롤러의 작업 처리 순서를 결정해야 하는것이 목표

접근 방법

우선순위 큐를 활용하여 작업들을 관리하고, 현재 시간과 작업을 효율적으로 관리하는 방식으로 접근.

  1. 주어진 작업 리스트를 요청시간 기준으로 정렬.
  2. 현재 시간 이하에 요청된 작업들을 우선순위 큐에 추가.
  3. 우선순위 큐에서 작업을 꺼내 현재 시간을 갱신하고, 작업의 대기시간과 실행시간을 기록한다.
  4. 우선순위 큐가 비어있을 경우, 다음 작업의 요청시간으로 갱신한다.
  5. 모든 작업을 처리하고, 실행시간의 평균을 계산하여 반환한다.

코드 구현

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