프로그래머스|디스크 컨트롤러

README·2023년 1월 13일
0

파이썬 PS풀이

목록 보기
111/136

문제 설명

작업들의 수행시간과 시작가능 시점을 입력받고 모든 작업을 마쳤을 때 평균 작업시간(요청시간부터 종료시간까지)이 가장 작은 방식으로 작업을 했을 때 나오는 평균 작업시간을 구하는 문제입니다.

작동 순서

  1. 입력받은 작업들을 요청시점 순으로 정렬해서 힙에 입력합니다.
  2. 0초부터 현재 가능한 작업들을 새로운 힙에 입력하고 그중 가장 작업 시간이 짧은 작업을 선택해서 수행합니다.
  3. 작업을 수행하고 나면 수행한 작업의 작업시간만큼 시간을 더해주고 해당 작업이 요청된 시점부터 완료된 시점까지 걸린 시간을 answer에 더해줍니다.
  4. 새로운 힙에 들어가있는 작업들 중 수행되지 않은 작업들은 다시 대기 목록 힙에 입력해줍니다.
  5. 만약 현재 가능한 작업이 없으면 다음 수행가능한 작업이 있을때까지 시간을 진행시킵니다.
  6. 모든 작업을 완료한 후 전체 작업시간을 전체 작업의 개수로 나눈 값을 구해줍니다.

소스 코드

import heapq
def solution(jobs):
    answer = 0
    time = 0
    lenJobs=len(jobs)
    heapq.heapify(jobs)
    arr=[]
    while jobs:
        while jobs:
            if time < jobs[0][0]:
                break
            else:
                job=heapq.heappop(jobs)
                heapq.heappush(arr, [job[1], job[0]])
                
        if not arr:
            time=jobs[0][0]
            continue
        
        job = heapq.heappop(arr)
        time+=job[0]
        answer+=time-job[1]
        
        while arr:
            job=heapq.heappop(arr)
            heapq.heappush(jobs,[job[1], job[0]])
            
    return answer//lenJobs
profile
INTP 개발자 지망생

0개의 댓글