본문 바로가기
ALGORITHM/PROGRAMMERS

[PG/Python] 디스크 컨트롤러

by 안녕나는현서 2021. 12. 26.
728x90

📌 문제

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

 

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

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

programmers.co.kr

 

📌 문제 접근 방법

  1. 최소힙을 사용해서 풀이했다.
  2. jobs의 첫 번째 원소가 현재 시간보다 작거나 같다면 ready에 push해준다.
    이 때, (소요 시간, 요청 시점) 순으로 튜플을 만들어서 ready가 소요 시간을 기준으로 최소값을 찾을 수 있도록 해준다.
  3. 만약 ready에 대기하고 있는 작업이 있다면 해당 작업의 소요 시간만큼 time을 늘리고 작업의 대기시간을 answer에 더해준다.
  4. ready에 대기하고 있는 작업이 없다면 시간만 1 늘려준다. (이 부분을 놓쳐서 계속 시간초과가 났다.)

 

📌 코드

import heapq

def solution(jobs):
    N = len(jobs)
    heapq.heapify(jobs)
    time = 0
    answer = 0
    ready = []
    
    while jobs or ready:
        while jobs and jobs[0][0] <= time:
            temp = heapq.heappop(jobs)
            heapq.heappush(ready, (temp[1], temp[0]))
        
        if ready:
            use, request = heapq.heappop(ready)
            time += use
            answer += time - request
        else:
            time += 1
    
    return answer//N
728x90

'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글

[PG/Python] 베스트앨범  (0) 2021.12.29
[PG/Python] 표 편집  (0) 2021.12.27
[PG/Python] 야근 지수  (0) 2021.12.22
[PG/Python] N으로 표현  (0) 2021.12.22
[PG/Python] 단어 변환  (0) 2021.12.22

댓글