디스크 컨트롤러
하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다.
각 작업에 대해 [작업이 요청되는 시점, 작업의 소요시간]을 담은 2차원 배열 jobs가 매개변수로 주어질 때, 작업의 요청부터 종료까지 걸린 시간의 평균을 가장 줄이는 방법으로 처리하면 평균이 얼마가 되는지 return 하도록 solution 함수를 작성해주세요. (단, 소수점 이하의 수는 버립니다)
jobs | return |
---|---|
[[0, 3], [1, 9], [2, 6]] | 9 |
import heapq
def solution(jobs):
answer = 0
tunnel = []
cnt = len(jobs)
time = 0
#jobs = heapq.heapify(jobs) #None
#while jobs:
for i in range(len(jobs)):
befar = jobs[i][0]
if not befar:
befar = 0
print(befar)
while jobs:
if len(tunnel) == 0:
first = heapq.heappop(jobs)
tunnel.append(first)
time += befar +tunnel[0][1] - tunnel[0][0]
#first[1] = first[1] - 1
tunnel.pop()
print(time, first[0], first[1])
#break
#print(time // cnt)
return time // cnt
import heapq
def solution(jobs):
jobs.sort(key=lambda x: x[0]) # 요청 시점 기준으로 정렬
time, total_time, cnt = 0, 0, len(jobs)
heap = [] # 최소 힙 (소요 시간 기준)
while jobs or heap:
# 현재 시점에서 처리 가능한 작업들을 heap에 추가
while jobs and jobs[0][0] <= time:
# 3초 동안 두번째, 세번째 작업 다 대기하니까
request_time, processing_time = jobs.pop(0)
#소요 시간이 가장 짧은 작업을 선택하기 위해서 process, request 순서
heapq.heappush(heap,
(processing_time, request_time))
if heap:
# heap에서 소요 시간이 가장 짧은 작업 선택
processing_time,
request_time = heapq.heappop(heap)
time += processing_time
total_time += time - request_time
else:
# 현재 시점에서 처리 가능한 작업이 없으면 시간을 1 증가
time += 1
return total_time // cnt
import heapq
def solution(jobs):
answer, now, i = 0, 0, 0
start = -1
heap = []
while i < len(jobs):
# 현재 시점에서 처리할 수 있는 작업을 heap에 저장
for j in jobs:
if start < j[0] <= now:
heapq.heappush(heap, [j[1], j[0]])
if len(heap) > 0: # 처리할 작업이 있는 경우
cur = heapq.heappop(heap)
start = now
now += cur[0]
answer += now - cur[1]
# 작업 요청시간부터 종료시간까지의 시간 계산
i +=1
else: # 처리할 작업이 없는 경우 다음 시간을 넘어감
now += 1
return answer // len(jobs)
좋은 글 감사합니다!