[프로그래머스] 디스크 컨트롤러

2022. 2. 18. 00:33Python/코딩 문제

# 문제 설명

하드디스크 컨트롤러를 구현하려고 한다. 하드디스크는 한 번에 하나의 작업만 수행할 수 있고, 각 작업의 요청시각부터 종료까지 걸린 시간의 평균이 최소가 되도록 할 때, 평균이 얼마가 되는지 반환해라.

단, 소수점 이하의 자리수는 버린다.

 

# 입출력 예시

입력 출력
[[0, 3], [1, 9], [2, 6]] 9

작업 요청시점, 작업의 소요시간 쌍이 입력으로 주어진다.

 

# 코드 풀이

from heapq import heapify, heappush, heappop
def solution(jobs):
    answer = 0
    n = len(jobs)
    heapify(jobs) # (요청시간, 작업시간) 순 정렬
    t = 0 # 지난 시간
    q = [] # (작업시간, 요청시간)
    while jobs or q:
        while jobs and jobs[0][0] <= t: # 지난시간까지 jobs에서 pop
            r, w = heappop(jobs)
            heappush(q, (w, r))
            
        if not q: # 없으면 1초씩 증가
            t += 1
        else: # 있으면 정렬 후 q에서 pop
            w, r = heappop(q)
            t += w
            answer += (t-r)
    return answer // n

 

# 핵심 포인트

  • 입력으로 주어진 jobs를 그대로 사용하기 때문에, 평균 계산에 사용하는 작업의 개수를 n에 저장해둔다.
  • 지나간 시간까지의 작업을 모두 q에 저장해두어 정렬 하면서 사용한다.
  • 작업은 요청시각 순으로, q는 작업시간 순으로 항상 정렬되어 있다.

 

 

 

 

반응형