알고리즘[Python]/프로그래머스
[ Lv 3 ] 디스크 컨트롤러
병훈1234
2021. 7. 13. 10:48
풀이 과정
시간이 덜 걸리는 작업부터 처리하면 된다.
jobs를 도착시간 순으로 정렬한 뒤, 히프에 첫번째 작업을 넣어 준다.
히프에 있는 작업들 중, 작업 시간이 가장 짧은걸 먼저 처리한다(작업 시간 기준으로 최소 히프)
현재 시간 + 작업 시간 내에 도착한 작업들이 있다면 최소 히프에 넣어준다.
★ 이때, 현재시간 + 작업시간 내에 도착하지 않고 이후에 도착하는 작업이 있을수도 있으니 해당 부분도 처리해주어야 한다.
import heapq
def solution(jobs):
answer = 0
heap = []
jobs.sort()
currentTime = jobs[0][0]; # 초기 작업의 시간으로 세팅
jobidx = 1
# 작업 시간을 기준으로 최소 히프 구성
heapq.heappush(heap, [jobs[0][1], jobs[0][0]])
while heap:
# 현재 기준 최소 시간의 작업 가져옴
jobtime, arrive = heapq.heappop(heap)
currentTime += jobtime
while jobidx < len(jobs):
if jobs[jobidx][0] <= currentTime:
heapq.heappush(heap, [jobs[jobidx][1], jobs[jobidx][0]])
jobidx += 1
else:
break
answer += (currentTime - arrive)
if not heap and jobidx < len(jobs):
currentTime = jobs[jobidx][0]
heapq.heappush(heap, [jobs[jobidx][1], jobs[jobidx][0]])
jobidx += 1
answer = answer // len(jobs)
return answer
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges