본문 바로가기
백준 & 프로그래머스

프로그래머스.[PCCP 모의고사 1] 4번.python

by concho 2023. 12. 2.

앞으로 priorityQueue절대 안씀ㅡㅡ

heapq최고

import heapq

def solution(program):
    # answer 배열 초기화
    answer = [0 for _ in range(11)]
    # program을 호출 시각에 따라 정렬합니다.
    program.sort(key=lambda x: x[1])
    # 최소 힙
    wait_heap = []

    # 변수 초기화
    pro_cnt, end_pro_cnt, time, pro_size = 0, 0, 0, len(program)

    # 모든 프로그램이 끝날 때까지 반복
    while end_pro_cnt != pro_size:
        # 시작 시간이 time 이하인 프로그램들을 대기열에 추가
        while pro_cnt < pro_size and time >= program[pro_cnt][1]:
            # 힙에 (우선순위, 프로그램 정보)를 추가
            heapq.heappush(wait_heap, (program[pro_cnt][0], program[pro_cnt]))
            pro_cnt += 1

        # 대기열에서 하나 꺼내어 처리
        if wait_heap:
            _, pro = heapq.heappop(wait_heap)
            # 대기 시간 더하기
            answer[pro[0]] += (time - pro[1])
            # 현재 시간 갱신
            time += pro[2]
            end_pro_cnt += 1
        else:
            # 대기열이 비어있다면, 다음 프로그램의 시작 시간으로 시간을 이동
            time = program[pro_cnt][1]

    answer[0] = time
    return answer

댓글