백준 2075번 N번째 큰 수

N번째 큰 수 문제 바로 가기

문제:
N×N의 표에 수 N²개가 채워져 있다. 이 수들은 한 가지 특징이 있는데, 각 수는 자신의 바로 위에 있는 수보다 크다는 것이다. 이러한 특성을 가진 표에서 N번째로 큰 수를 찾는 프로그램을 작성하시오. 표에 적힌 수는 모두 다르다.

입력:
- 첫째 줄: 정수 N (1 ≤ N ≤ 1,500) - 둘째 줄부터 N개의 줄에 걸쳐 N개의 정수 - 각 수는 -10억 이상 10억 이하

출력:
- N번째로 큰 수 하나를 출력


풀이 코드


import heapq

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

for _ in range(n):
    nums = map(int, input().split())
    for num in nums:
        if len(heap) < n:
            heapq.heappush(heap, num)
        else:
            if heap[0] < num:
                heapq.heappop(heap)
                heapq.heappush(heap, num)

print(heap[0])


해결 방법:

  • 우선순위 큐(최소 힙)를 사용하여 항상 N개의 가장 큰 수만 유지한다.
  • heap의 길이가 N보다 작을 때는 무조건 넣고,
  • N개가 꽉 찼다면, 현재 숫자가 heap의 최솟값보다 클 때만 교체한다.
  • 결국 heap에는 가장 큰 수 N개가 남게 되고, 그 중 가장 작은 수가 N번째 큰 수이다.