Algorithm/Python

[Python] 백준 - 17225번 세훈이의 선물가게(Priority Queue)

힘팽 2022. 2. 23. 23:46

◈ 오류 정정 및 피드백 환영

 

17225번: 세훈이의 선물가게

첫 줄에 상민이가 선물 하나를 포장하는 데 걸리는 시간 A, 지수가 선물 하나를 포장하는 데 걸리는 시간 B, 어제 세훈이 가게의 손님 수 N(1 ≤ N ≤ 1,000)이 주어진다. 이후 N개의 줄에 걸쳐 1번부

www.acmicpc.net


🔎문제 분석

예제 그림 자체가 큐를 그린 것이고, 상민이와 지수 중에 선택을 해서 큐에 저장해야 하기 때문에 순위를 고려할 수 있는 우선순위 큐(Priority Queue)로 접근하면 된다. 

🤦‍♀️유의 사항

이전 포장이 끝나지 않았는데 주문을 받는 경우를 고려해야 한다.

주문 시작 시간을 이전 포장 종료 시간으로 업데이트한 뒤에 큐에 저장해야 한다.


import heapq as hq
import sys
input = sys.stdin.readline

a, b, n = map(int, input().split())

res = []

t_b = t_r = 0
for _ in range(n):
    t, c, m = input().split()
    t = int(t)
    m = int(m)

    if c=="B":
        if t_b < t:
            t_b=t
        for _ in range(m):
            hq.heappush(res, (t_b,"B"))
            t_b += a
    else:
        if t_r < t:
            t_r=t
        for _ in range(m):
            hq.heappush(res, (t_r,"R"))
            t_r += b

dic = {"B":[],"R":[]}
num = 1
for _ in range(len(res)):
    _, c = hq.heappop(res)
    dic[c].append(num)
    num += 1
for k, v in dic.items():
    print(len(v))
    print(*v, sep=" ")