Algorithms / Programmers / 디스크 컨트롤러 / 파이썬

Onam Kwon·2022년 6월 29일
0

Algorithms

목록 보기
17/24



링크

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

풀이

  • 변수 i0으로 초기화시켜 생성한 후 전체 jobs의 길이와 같아질 때까지 반복시킨다.
    • job의 시작시점 값이 start<job[0]<=now를 만족하는 경우 heapjob의 작업크기, 작업 시작 시점 순으로 푸시해준다.
      • heap에 들어갈때 순서는 작업크기를 기준으로 들어가기 때문.
    • 그 후 나머지 알고리즘을 통해 전체 작업 소요 시간을 구해주는데 로직은 실제 작업시간 + 작업 시작하기 전 대기시간을 합한 값과 같다
    • 작업을 하지 않는 시간이 있을 경우 now변수값에 1을 더해준다.
  • 마지막에 jobs의 길이로 나눠준 후 문제 설명에 따라 소수점 이하의 수는 버려준다.
  • 아래 그림은 이해를 쉽게 하기 위해 그려봤습니다.

코드

import heapq

def solution(jobs):
    answer, now, i = 0,0,0
    start = -1
    heap = []
    while i<len(jobs):
        for job in jobs:
            if start < job[0] <= now:
                heapq.heappush(heap, [job[1], job[0]])
        if len(heap)>0:
            current = heapq.heappop(heap)
            start = now
            now += current[0]
            answer += (now-current[1])
            i += 1
        else:
            now += 1
    return int(answer/len(jobs))
profile
권오남 / Onam Kwon

0개의 댓글