[프로그래머스] 디스크 컨트롤러
2022. 2. 18. 00:33ㆍPython/코딩 문제
# 문제 설명
하드디스크 컨트롤러를 구현하려고 한다. 하드디스크는 한 번에 하나의 작업만 수행할 수 있고, 각 작업의 요청시각부터 종료까지 걸린 시간의 평균이 최소가 되도록 할 때, 평균이 얼마가 되는지 반환해라.
단, 소수점 이하의 자리수는 버린다.
# 입출력 예시
입력 | 출력 |
[[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는 작업시간 순으로 항상 정렬되어 있다.
반응형
'Python > 코딩 문제' 카테고리의 다른 글
[리트코드] 208. Implement Trie (Prefix Tree) (0) | 2022.02.21 |
---|---|
[프로그래머스] 이중 우선순위 큐 (0) | 2022.02.18 |
[프로그래머스] 더 맵게 (0) | 2022.02.17 |
[리트코드] 743. Network Delay Time (0) | 2022.02.14 |
[프로그래머스] 가장 큰 수 (0) | 2022.02.07 |