[프로그래머스] 디스크 컨트롤러 (파이썬)

dongEon·2024년 4월 19일
0

문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/42627

난이도: LV 3

문제해결 아이디어

  • 시간내에 시작할 수 있는 작업 중 가장 양이 적은 작업 부터 해야한다
  • 양이 많은 작업을 먼저하면 양이 적은 작업은 양이 많은 작업 만큼 cost가 증가함 => 최소 힙 사용
  • for 문을 순회 할때 이미 힙에 들어간 작업을 또 넣지 않게 start 변수를 사용하여 일정 시간 이후의 작업만 힙에 들어가게 한다

소스코드

import heapq

def solution(jobs):    
    now = 0
    i = 0
    h = []        
    cost = 0    
    start = -1 # 이미 처리한 작업 중복 제거
    while i < len(jobs):
        for j in jobs:
            if start < j[0] <= now: 
                heapq.heappush(h, (j[1], j[0]))
                        
        if h:
            start = now
            k = heapq.heappop(h)
            now += k[0]
            i += 1
            cost += (now - k[1])
            
        else:
            now += 1
    
    return cost // len(jobs)
profile
반갑습니다! 알고리즘 문제 풀이 정리 블로그 입니다. 피드백은 언제나 환영입니다!

0개의 댓글