티스토리 뷰

import sys
import heapq

T = int(sys.stdin.readline())
result = []

for i in range(T):
  max_arr = []
  min_arr = []
  visit = [False] * 1_000_001
  K = int(sys.stdin.readline())
  count = 0
  for i in range(K):
    S, num = sys.stdin.readline().split()

    if S == "I":
      # 튜플의 첫번째로 인해 우선순위 바뀜 
      heapq.heappush(max_arr, (-int(num), i))
      heapq.heappush(min_arr, (int(num), i))
      # True == 아직 지워지지 않음 
      visit[i] = True 
    else:
      if int(num) == -1:
        # 상대힙에서 버린 것 처리 
        while min_arr and not visit[min_arr[0][1]]:
          heapq.heappop(min_arr)
        if min_arr:
          visit[min_arr[0][1]] = False
          heapq.heappop(min_arr)

      elif int(num) == 1:

        while max_arr and not visit[max_arr[0][1]]:
          heapq.heappop(max_arr)
        if max_arr:
          visit[max_arr[0][1]] = False
          heapq.heappop(max_arr)
  
  # 만약 마지막 2번 돌린 연산이 max_arr만 했다면 min_arr 에서 갱신을 해줘야 하므로 
  while min_arr and not visit[min_arr[0][1]]:
    heapq.heappop(min_arr)
  while max_arr and not visit[max_arr[0][1]]:
    heapq.heappop(max_arr)
  if min_arr and max_arr:
    print(-max_arr[0][0], min_arr[0][0])
  else:
    print('EMPTY')

처음 이해하는데 좀 걸렸는데 

코드만 좀 길뿐이지 이해하는데 쉬웠다 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함