from collections import deque import bisect import sys input = sys.stdin.readline T = int(input()) for _ in range(T): stack = deque() stack_dict = dict() for _ in range(int(input())): command,val = input().split() val = int(val) if command == 'I': if stack_dict.get(val): stack_dict[val] += 1 else: bisect.insort_left(stack,val) stack_dict[val] = 1 else: if val == 1: if stack: last_number = stack[-1] if stack_dict[last_number] == 1: stack_dict.pop(last_number) stack.pop() else: stack_dict[last_number] -= 1 else: if stack: first_number = stack[0] if stack_dict[first_number] == 1: stack_dict.pop(first_number) stack.popleft() else: stack_dict[first_number] -= 1 if stack: print(stack[-1],stack[0]) else: print('EMPTY')
정렬된 행렬일때 쓸 수 있는 bisect 라이브러리를 이용해서, 이진탐색 후, deque에 넣어주었다.
뺄때 매번 insert, pop을 하면 연산시간이 오래걸리므로, dictionary로 개수를 세주었고, dictionary가 0이 될때 pop을 해주었다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 4811 알약 (0) | 2021.02.25 |
---|---|
[BOJ/백준] 19606 Escape Room (0) | 2021.02.24 |
[BOJ/백준] 1747 소수 팰린드롬 (0) | 2021.02.23 |
[BOJ/백준] 1475 방 번호 (0) | 2021.02.23 |
[BOJ/백준] 1463 1로 만들기 (0) | 2021.02.23 |