최대 1 분 소요

Heap

BOJ 2075번 N번째 큰 수

문제

N번째 큰수

구조화

  • 1차 접근
    • n번 째 큰 수이므로, max_heap으로 n번째 출력시도
    • 그러나 메모리 제한이 12MB이므로 메모리 초과 예상
  • 2차 접근
    • 메모리 효율성을 위해 heap의 최대 크기를 n으로 설정
    • min heap 구성한 후 n크기 유지하며 첫번 째 값 출력
    • Process
      • 1행의 data는 그대로 min heap에 push
      • 2행부터
        • min value(root node 제거)
        • new data psuh
        • 반복
        • 이전 행보다 다음 행의 값이 더 크므로, 적어도 한 개 이상 제거 가능에서 출발한 관점
      • heap의 첫번 째 값 출력

예제 시각화

해답

import sys
import heapq as hq
input = sys.stdin.readline
n=int(input())
hqa = []
hq.heapify(hqa)
for i in range(n):
    data =list(map(int, input().split()))
    if len(hqa)==0:
        for num in data:
            hq.heappush(hqa,num)
    else:
        for num in data:
            hq.heappushpop(hqa,num)
print(hqa[0])

댓글남기기