https://programmers.co.kr/learn/courses/30/lessons/42627
import heapq
def solution(jobs):
'''
풀이 알고리즘 - 비선점 디스크 스케줄러
1. 2차원 배열을 요청과 작업 순서가 적은대로 정렬. sort활용.
2. 작업 시작 시간과 작업 시간을 고려해서 heapq에 저장
3. count와 latest, time 최신화
'''
jobs.sort()
heap = []
count = 0 # 디스크 컨트롤러 작업 횟수 기록
answer= 0 # 총 걸린 시간
latest= -1 # 최근 작업 시작 시간
time = jobs[0][0] # 첫 작업 시간 초기화
while count<len(jobs): # 디스크 컨트롤러 작업이 끝나지 않았다면
for t , s in jobs:
if latest< t <= time: # 작업 시작 시간 고려 먼저 시작할 작업들 선정
heapq.heappush(heap,(s,t)) #작업 완료시간 기준으로 min heap 추가
if len(heap)>0: # 시작할 수 있는 작업이 있는 경우
count+=1 # 작업 하나 완료
run, start =heapq.heappop(heap) # heap에서 꺼냄
latest = time # 최근 작업 시작시간
time += run # 작업 끝난 시간 최신화
answer += time-start # 작업 끝난 시간 - 작업 들어온 시간
else : # 시작할 수 있는 작업이 없는 경우
time+=1
return answer//len(jobs) #평균
'Programming > Programmers' 카테고리의 다른 글
[프로그래머스] 이중우선순위큐(Python) (0) | 2021.08.12 |
---|---|
[프로그래머스] 정수삼각형(Python) (0) | 2021.08.12 |
[프로그래머스] N으로 표현(Python) (0) | 2021.08.12 |
[프로그래머스] 입국심사(Python) (0) | 2021.08.12 |
[프로그래머스] 도둑질(Python) (0) | 2021.08.12 |
댓글