공부하고 기록하는, 경제학과 출신 개발자의 노트

프로그래밍/코딩테스트 문제풀이

[Python] 프로그래머스. 디스크 컨트롤러 (Level 3)

inspirit941 2019. 11. 13. 18:18
반응형

https://programmers.co.kr/learn/courses/30/lessons/42627

 

코딩테스트 연습 - 디스크 컨트롤러 | 프로그래머스

하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를들어 - 0ms 시점에 3ms가 소요되는 A작업 요청 - 1ms 시점에 9ms가 소요되는 B작업 요청 - 2ms 시점에 6ms가 소요되는 C작업 요청 와 같은 요청이 들어왔습니다. 이를 그림으로 표현하면 아래와 같습니다. 한 번에 하나의 요청만을 수행할 수 있기 때문에 각각의

programmers.co.kr

heapq 라이브러리를 사용하고, 프로세스가 queue에 들어올 수 있는 경우 / 여러 프로세스가 queue에 들어온 경우 시간을 어떻게 계산할 것인지가 꽤 고민스러운 문제.

 

 

import heapq
def solution(jobs):
n = len(jobs)
time, end, queue = 0, -1, []
# 처리한 프로세스 개수
count = 0
answer = 0
while count < n:
for i in jobs:
# i[0] = 프로세스 입력 시간, i[1] = 프로세스 끝날 때까지 걸리는 시간
if end <i[0] <= time:
# 현재 시간 기준, 프로세스가 queue에 들어가서 얼마나 기다렸는지.
answer += (time - i[0])
heapq.heappush(queue, i[1])
if len(queue) > 0:
# 가장 빨리 끝나는 프로세스가 끝날 때까지는 queue에 있는 프로세스 전부 대기시간이므로 값을 추가한다.
answer += len(queue) * queue[0]
# 끝난 시간
end = time
# 가장 빨리 끝나는 프로세스가 걸린 시간을 더해준다
time += heapq.heappop(queue)
# 프로세스가 끝났으므로 count + 1 해준다.
count += 1
else:
# queue에 아직 아무것도 없으므로 시간을 +1 해준다.
time += 1
return (int(answer / n))
반응형