Algorithm/Baekjoon

[힙] 백준 #2075 N번째 큰 수 - Python

jyjyjy25 2024. 3. 8. 02:23

🗂️ 문제

링크: ttps://www.acmicpc.net/problem/2075

 

2075번: N번째 큰 수

첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다.

www.acmicpc.net

 

💡 접근법

heapq 라이브러리를 사용하면 간단하게 풀 수 있다.

입력으로 들어오는 값들을 1차원 리스트로 만든다. 이때 메모리 초과를 고려하여 heap의 크기를 N으로 고정해야 한다. 따라서 heapq.nlargest(N, arr)를 사용하여 arr에 N번째까지 큰 수들만 남기면서 새로운 입력 값들을 arr에 업데이트한다.

 

😎 내 코드

import heapq
import sys

N = int(sys.stdin.readline())

arr = []
for _ in range(N):
    temp = list(map(int, sys.stdin.readline().split()))
    for t in temp:
        arr.append(t)
    
    arr = heapq.nlargest(N, arr)

print(heapq.nlargest(N, arr)[-1])

 

🧐 배운 점

  • heapq.nlargest(N, arr)
  • 주어진 리스트 arr에서 가장 큰 N개의 값을 담은 리스트를 반환한다.
  • 메모리가 초과될 때는 리스트의 길이를 줄여보자. 즉 할당된 요소의 크기나 개수를 줄여야 한다.

 

✅ 정답 확인