[백준] N번째 큰 수

Hyunwoo Park·2021년 3월 27일
0

heapq를 이용하여 거저 먹으려고 하면 메모리 초과라는 철퇴를 맞는 문제이다. 즉, 힙 리스트의 크기를 제한을 두며 풀어야 한다.

N번째 큰 수를 구하기 위해선 크기가 N의 최소 힙에서 맨 앞 원소라는 것을 알아야 한다.

즉, N의 크기를 지켜가며 push, pop을 하면 된다.

힙 리스트의 크기가 N보다 작은 경우는 새로운 요소가 들어온 경우 push를 해주면 된다.

힙 리스트의 크기가 N이상인 경우가 조금 헷갈릴 요소가 있는데, 힙 리스트의 크기를 N개를 맞춰주는 과정에서 새로운 것을 push한 뒤에 pop을 해야 한다. 왜냐하면 새로 들어올 요소가 기존의 요소보다 작은 경우가 있기 때문이다.

import heapq

heap = []
N = int(input())

for i in range(N):
    arr = list(map(int, input().split()))
    
    for j in arr:
        if len(heap) < N:
            heapq.heappush(heap, j)
            
        else:
            heapq.heappush(heap, j)
            heapq.heappop(heap)

print(heap[0])
profile
만나서 반갑습니다.

0개의 댓글