STUDY/Algorithm

[프로그래머스] LEVEL3 힙 디스크 컨트롤러, python

sinawi95 2021. 12. 26. 16:52
728x90

https://programmers.co.kr/learn/courses/30/lessons/42627

 

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

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

programmers.co.kr

from heapq import heappush, heappop


def solution(jobs):
    # jobs가 정렬이 안되어있음
    jobs.sort(key=lambda x: (x[0], x[1]))

    # 0 변수 선언
    min_h = []
    jobs_idx = 0
    cur = 0
    s, rt = None, None
    running = False
    answer_list = []

    # 1 디스크 컨트롤러 with min_HEAP
    while jobs_idx < len(jobs) or min_h or running:
        if running:
            answer_list.append((rt + cur - s))
            cur += rt
            running = False
        else: # disk is not running
            while jobs_idx < len(jobs) and cur >= jobs[jobs_idx][0]:
                heappush(min_h, (jobs[jobs_idx][1], jobs[jobs_idx][0]))
                jobs_idx += 1

            if min_h:
                rt, s = heappop(min_h)
                running = True
            else:
                cur += 1
    # 2 정답 출력
    answer = sum(answer_list) // len(answer_list)
    return answer


if __name__ == '__main__':
    print(solution(	[[0, 3], [1, 9], [2, 6]]))

시뮬레이션으로 하면 시간초과가 날거같아서 다른 방법을 생각하다보니 오랜 시간을 소요했다.

작업을 수행하고 있는지 아닌지 파악하고, 작업을 수행하지 않을 경우에만 모든 일을 추가하는 방식으로 풀었다.