백준 3755번: Double Queue #Python

ColorlessDia·2025년 6월 1일

algorithm/baekjoon

목록 보기
560/807
import sys
from heapq import heappush, heappop

def add_client(waiting_list, priority, client):
    heappush(waiting_list, (priority, client))

def del_client(wating_list, client_state):
    served_client = []

    while wating_list:
        _, client = heappop(wating_list)

        if not client_state[client]:
            continue
        
        served_client.append(client)
        client_state[client] = 0
        break
    
    return served_client

input = sys.stdin.readline

asc_waiting_list = []
des_waiting_list = []
client_state = dict()

while 1:
    line = list(map(int, input().split()))
    command = line[0]

    if command == 0:
        break
    
    if command == 1:
        client = line[1]
        priority = line[2]

        add_client(asc_waiting_list, priority, client)
        add_client(des_waiting_list, -priority, client)

        client_state[client] = 1
        continue
        
    if command == 2:
        served_client = del_client(des_waiting_list, client_state)

        if served_client:
            print(*served_client)
        else:
            print(0)

        continue
        
    if command == 3:
        served_client = del_client(asc_waiting_list, client_state)

        if served_client:
            print(*served_client)
        else:
            print(0)
        
        continue

0개의 댓글