백준 2075번 N번째 큰 수
N번째 큰 수 문제 바로 가기
문제:
N×N의 표에 수 N²개가 채워져 있다. 이 수들은 한 가지 특징이 있는데, 각 수는 자신의 바로 위에 있는 수보다 크다는 것이다. 이러한 특성을 가진 표에서 N번째로 큰 수를 찾는 프로그램을 작성하시오. 표에 적힌 수는 모두 다르다.
입력:
- 첫째 줄: 정수 N (1 ≤ N ≤ 1,500) - 둘째 줄부터 N개의 줄에 걸쳐 N개의 정수 - 각 수는 -10억 이상 10억 이하
출력:
- 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번째 큰 수이다.