알고리즘[Python]/프로그래머스

[ Lv 3 ] 디스크 컨트롤러

병훈1234 2021. 7. 13. 10:48

풀이 과정


  1. 시간이 덜 걸리는 작업부터 처리하면 된다.

  2. jobs를 도착시간 순으로 정렬한 뒤, 히프에 첫번째 작업을 넣어 준다.

  3. 히프에 있는 작업들 중, 작업 시간이 가장 짧은걸 먼저 처리한다(작업 시간 기준으로 최소 히프)

  4. 현재 시간 + 작업 시간 내에 도착한 작업들이 있다면 최소 히프에 넣어준다.

  5. ★ 이때, 현재시간 + 작업시간 내에 도착하지 않고 이후에 도착하는 작업이 있을수도 있으니 해당 부분도 처리해주어야 한다.


import heapq

def solution(jobs):
    answer = 0
    heap = []

    jobs.sort()
    currentTime = jobs[0][0]; # 초기 작업의 시간으로 세팅
    jobidx = 1

    # 작업 시간을 기준으로 최소 히프 구성
    heapq.heappush(heap, [jobs[0][1], jobs[0][0]])

    while heap:
        # 현재 기준 최소 시간의 작업 가져옴
        jobtime, arrive = heapq.heappop(heap)
        currentTime += jobtime
        while jobidx < len(jobs):
            if jobs[jobidx][0] <= currentTime:
                heapq.heappush(heap, [jobs[jobidx][1], jobs[jobidx][0]])
                jobidx += 1
            else:
                break

        answer += (currentTime - arrive)

        if not heap and jobidx < len(jobs):
            currentTime = jobs[jobidx][0]
            heapq.heappush(heap, [jobs[jobidx][1], jobs[jobidx][0]])
            jobidx += 1


    answer = answer // len(jobs)
    return answer

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges