https://www.acmicpc.net/problem/2075

import sys
import heapq
input = sys.stdin.readline
n = int(input())
table = [list(map(int, input().split())) for _ in range(n)]
heap = []
for i in range(n):
for j in range(n):
heapq.heappush(heap, -table[i][j])
cnt = 0
for i in range(n-1):
heapq.heappop(heap)
print(-heap[0])
처음에 모든 값들을 힙에 넣었다가 메모리 초과가 나왔다.
그래서 생각한 방법은 heap에는 데이터 n개만 있도록 유지하는 것이다.
heap의 데이터 길이를 n개만 있도록 유지하면서 힙에 있는 최솟값보다 더 큰 게 나오면 pop하고 push하는 방식으로 진행하였다.
데이터를 n개만 있도록 유지하므로 최종적으로 맨 앞에 있는 게 n번째로 큰 수가 된다.
import sys
import heapq
input = sys.stdin.readline
n = int(input())
heap = []
# heap len n유지
for i in range(n):
l = list(map(int, input().split()))
if not heap: # 힙에 아무것도 없으면
for num in l:
heapq.heappush(heap, num)
else:
for num in l: # 힙에 뭐 있으면 길이 n유지
if heap[0] < num: # 최솟값보다 크면 최솟값은 빼고 해당 숫자 넣기
heapq.heappop(heap)
heapq.heappush(heap, num)
print(heap[0])