# Topic : Data_Structur_2 _ N번째 큰 수
#
# PyPy 3 : 메모리 초과
import sys
N = int(sys.stdin.readline())
box = list()
for _ in range(N):
box.extend(list(map(int,sys.stdin.readline().rstrip().split())))
box.sort()
print(box[-5])
# Topic : Data_Structur_2 _ N번째 큰 수
#
# PyPy 3 : 792ms
# 위와는 다르게 live의 크기를 N*2 로 제한하여 수행
import sys
N = int(sys.stdin.readline())
live = [] # 각각의 줄을 순회하며 가장 큰 N개의 숫자를 저장할 list
for n in range(N):
if n == 0: # 처음에는 그냥 저장한다.
live = list(map(int,sys.stdin.readline().rstrip().split()))
else: # 이후에는 이전 live와 비교하고 sort하여 가장 큰 N개의 list를 live에 저장한다.
tmp = list(map(int,sys.stdin.readline().rstrip().split())) + live
tmp.sort()
live = tmp[N:]
print(live[0])
# Topic : Data_Structur_2 _ N번째 큰 수
#
# PyPy 3 : 732ms
import sys
import heapq
N = int(sys.stdin.readline())
heap = []
for _ in range(N): # 한줄씩 입력
nums = list(map(int,sys.stdin.readline().rstrip().split()))
if not heap: # 처음 heap이 비어있을 경우 heap 초기화
for n in nums:
heapq.heappush(heap,n)
else:
for n in nums:
if heap[0] < n: # heap에 들어있는 최소값보다 더 큰값이 들어오면 최소값을 heap에서 빼고 해당 값을 heap에 넣어준다.
heapq.heappush(heap,n)
heapq.heappop(heap)
print(heap[0])
기존의 큐(FIFO)와 다르게 우선순위 큐(Priority Queue)는 들어간 순서에 상관없이 우선순위가 높은 데이터가 먼저 나온다.
우선 순위 큐를 구현시 조건은 다음과 같다
우선 순위 큐의 경우 배열, 연결 리스트, 힙으로 구현할 수 있는데 이중 힙 구현이 O(logN) 시간 복잡도를 가져 가장 효율적이다.
heapq 모듈을 사용하여 구현시 (”우선 순위(오름차순)”, “해당 원소”) 형태의 튜플을 원소로 사용하여 우선순위별 정렬을 수행할 수 있다.