개발/코딩테스트

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

grulsuitg 2022. 6. 29. 14:28

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

 

코딩테스트 연습 - 디스크 컨트롤러

하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를

programmers.co.kr


My Soulution

import heapq as hq


def solution(jobs):
    total = cur = i = 0
    cnt = len(jobs)
    jobs.sort()
    heap = []

    while i < cnt:
        while jobs and cur >= jobs[0][0]:
            item = jobs.pop(0)
            hq.heappush(heap, (item[1], item[0]))

        if heap:
            (time, start) = hq.heappop(heap)
            cur += time
            total += cur - start
            i += 1
        else:
            cur = jobs[0][0]

    return total // cnt

 

Key Idea

  • jobs 를 sort하기 → 요청 시간 순서대로 저장되어있지 않을 수 있음
  • 현재 시간(cur)를 기준으로 요청시간이 작은 것을 heap 에 넣기
  • heap에서 한 개씩 꺼내서 작업하기
    → 처음에는 while 문으로 모두 돌려서 작업해서 오래걸림
    반례 : [[0, 3], [4, 4], [5, 3], [4, 1]] → 3
  • 만약 현재 시간(cur)가 jobs의 첫번째 요청시간보다 작다면 cur 를 update
    → 이것도 작은 것을 예외로 두어 task 처리하는 방식으로 하다가 오래걸림.

 

Best Soultion과 알고리즘 상 큰 차이가 없고 가독성이 엄청 좋다고 생각되지 않아서 생략합니다.