[백준/BOJ][Python] 2075번 N번째 큰 수

Eunding·2024년 12월 9일

algorithm

목록 보기
70/110

2075번 N번째 큰 수

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])

0개의 댓글