[λ°±μ€€-7662] 이쀑 μš°μ„ μˆœμœ„ 큐 / Python

πŸ“š Problem Solving/Baekjoon

 

7662번: 이쀑 μš°μ„ μˆœμœ„ 큐

μž…λ ₯ λ°μ΄ν„°λŠ” ν‘œμ€€μž…λ ₯을 μ‚¬μš©ν•œλ‹€. μž…λ ₯은 T개의 ν…ŒμŠ€νŠΈ λ°μ΄ν„°λ‘œ κ΅¬μ„±λœλ‹€. μž…λ ₯의 첫 번째 μ€„μ—λŠ” μž…λ ₯ λ°μ΄ν„°μ˜ 수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ Tκ°€ 주어진닀. 각 ν…ŒμŠ€νŠΈ λ°μ΄ν„°μ˜ 첫째 μ€„μ—λŠ” Q에 적

www.acmicpc.net

import sys
import heapq

input = sys.stdin.readline

answer = []
for _ in range(int(input())):
    visited = [False] * 1000001
    minH, maxH = [], []
    for i in range(int(input())):
        s = input().split()
        if s[0] == "I":
            heapq.heappush(minH, (int(s[1]), i))
            heapq.heappush(maxH, (-int(s[1]), i))
            visited[i] = True
        elif s[1] == "1":
            while maxH and not visited[maxH[0][1]]:
                heapq.heappop(maxH)
            if maxH:
                visited[maxH[0][1]] = False
                heapq.heappop(maxH)
        else:
            while minH and not visited[minH[0][1]]:
                heapq.heappop(minH)
            if minH:
                visited[minH[0][1]] = False
                heapq.heappop(minH)

    while minH and not visited[minH[0][1]]:
        heapq.heappop(minH)
    while maxH and not visited[maxH[0][1]]:
        heapq.heappop(maxH)

    answer.append(f"{-maxH[0][0]} {minH[0][0]}" if maxH and minH else "EMPTY")

print("\n".join(answer))

 

ν•΄μ„€

νŒŒμ΄μ¬μ—μ„œ νž™μ€ μ΅œμ†Œνž™λ§Œ μ§€μ›ν•˜κΈ° λ•Œλ¬Έμ— μ΅œλŒ€νž™λ„ λ”°λ‘œ κ΅¬ν˜„μ„ ν•΄μ€˜μ•Όν•œλ‹€. 이 뢀뢄은 -1을 κ³±ν•΄μ£ΌλŠ” κ²ƒμœΌλ‘œ ν•΄κ²°ν•  수 μžˆλ‹€. 이제 μ΅œμ†Œνž™κ³Ό μ΅œλŒ€νž™μ˜ 동기화가 ν•„μš”ν•˜λ‹€. μ΄λŠ” 인덱슀λ₯Ό ν™œμš©ν•΄ ν•΄κ²°ν•  수 μžˆλ‹€. κ°’κ³Ό 인덱슀λ₯Ό νŠœν”Œλ‘œ λ¦¬μŠ€νŠΈμ— λ„£μ–΄μ€€λ‹€. 인덱슀λ₯Ό κΈ°μ€€μœΌλ‘œ ν•΄λ‹Ή λ…Έλ“œκ°€ λ‹€λ₯Έ νž™μ—μ„œ μ‚­μ œλœ λ…Έλ“œμΈμ§€ μ•„λ‹Œμ§€λ₯Ό νŒλ‹¨ν•˜κ³ , 이미 μ‚­μ œλœ λ…Έλ“œλΌλ©΄ μ‚­μ œλ˜μ§€ μ•Šμ€ λ…Έλ“œκ°€ λ‚˜μ˜¬ λ•ŒκΉŒμ§€ λͺ¨λ‘ 버린닀. μ‚­μ œ λŒ€μƒ λ…Έλ“œκ°€ λ“±μž₯ν•˜λ©΄ μ‚­μ œν•œλ‹€. 이λ₯Ό μœ„ν•΄ 각 μΈλ±μŠ€λ³„λ‘œ ν™œμ„±μƒνƒœλ₯Ό κΈ°λ‘ν•˜λŠ” ν”Œλž˜κ·Έ 리슀트 visitedλ₯Ό μ‚¬μš©ν•œλ‹€.

연산이 λͺ¨λ‘ λλ‚œ 후에도 μ“°λ ˆκΈ° λ…Έλ“œλ“€μ΄ λ‚¨μ•„μžˆμ„ 수 μžˆλ‹€. 이 λ•Œλ¬Έμ—, κ²°κ³Όλ₯Ό λ‚΄κΈ° μ „ μ“°λ ˆκΈ° λ…Έλ“œλ₯Ό λͺ¨λ‘ λΉ„μš°κ³  각 νž™μ˜ 첫번째 값을 좜λ ₯ν•œλ‹€.

 

λ„ˆλ¬΄ μ–΄λ €μš΄ λ¬Έμ œμ˜€λ‹€........πŸ˜₯