[Python] [Programmers] 디스크 컨트롤러(42627)

긍정왕·2021년 6월 14일
2

Algorithm

목록 보기
24/69
post-thumbnail

💡 문제 해결

  1. 전체 시간과 마지막 작업 시간, 처리한 작업의 개수를 각각 설정
  2. 작업의 처리량이 전체 작업량보다 작을 동안 반복문 실행
  3. 전체 작업 중 시작 시간이 마지막 작업시간보다 나중이고, 전체 시간보다 같거나 작을 경우 heap에 추가
  4. 만약 heap이 존재 하는 경우 해당 작업의 소요시간을 정답에 추가하고, 전체 시간 및 마지막 작업 시간을 갱신
  5. heap에 추가된 값이 없다면 전체 시간을 한 칸 이동
  6. 모든 작업이 처리되었다면 모든 작업을 처리하는데 걸린 시간을 3으로 나눠 반환

📌 전체 작업을 작업처리 시간을 기준으로 heap에 추가한 뒤 작업을 처리했을 때는 시간초과
📌 갱신해야하는 데이터와 처리해줘야할 조건이 많아 생각보다 까다로웠던 문제



🧾 문제 설명




문제보기



🖨 입출력



📝 풀이

import heapq

def solution(jobs):
    answer = 0

    N = len(jobs)
    heap = []
    time, last, cnt = 0, -1, 0
    while cnt < N:
        for start, during in jobs:
            if last < start <= time:
                heapq.heappush(heap, (during, start))
        if len(heap) > 0:
            during, start = heapq.heappop(heap)
            last = time
            time += during
            answer += (time - start)
            cnt += 1
        else:
            time += 1

    answer //= N

    return answer

profile
Impossible + 땀 한방울 == I'm possible

0개의 댓글