(python3)
2075번: N번째 큰 수
첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다.
www.acmicpc.net
메모리 초과, 최소힙, heapq
배열을 모두 받은 상태에서 맨 아랫줄 N개를 비교해서 가장 큰 값을 찾아서 pop 하는 방식으로 N번 수행해서 N번째 pop 되는 값을 구하려고 했는데, 메모리초과가 났습니다.
이 문제는 최소힙으로 정보를 읽어올때마다 항상 N개의 값만 저장하는 방식으로 해결할 수 있습니다.
파이썬에서는 배열을 최소힙 형태로 관리할 수 있는 heapq 모듈을 제공합니다.
아래 독스로 사용법을 확인할 수 있습니다.
heapq — Heap queue algorithm
Source code: Lib/heapq.py This module provides an implementation of the heap queue algorithm, also known as the priority queue algorithm. Heaps are binary trees for which every parent node has a va...
docs.python.org
최소힙에는 N개의 노드만 유지할거고, 새로운 정보를 넣고 N+1 개의 노드가 되면 헤드 (최소값) 을 pop 해줍니다.
모든 입력값에 대해 수행하고 나면, 헤드에 남은 값이 곧 우리가 찾는 N번째 큰 값이 됩니다.
코드
import sys
import heapq
def solution(input) :
# 최소힙, 원소 N 개를 항상 유지
# 모든 내용물을 다 넣었을때 head 가 우리가 구하고자하는 값이 됨
H = []
N = int(input().strip())
cnt = 0
for _ in range(N) :
for n in list(map(int,input().split())) :
heapq.heappush(H, n)
cnt+=1
if cnt > N :
heapq.heappop(H)
print(heapq.heappop(H))
input = sys.stdin.readline
solution(input)
my solved.ac :
solved.ac
알고리즘 문제해결 학습의 이정표 🚩 Baekjoon Online Judge 문제들의 난이도 및 티어 정보를 제공하는 사이트입니다.
solved.ac
'Algorithem > 백준 PS with code' 카테고리의 다른 글
백준 #9252 - [G4] LCS 2 : DP (0) | 2023.06.29 |
---|---|
백준 #1138 - [S2] 한 줄로 서기 (0) | 2023.06.27 |
백준 #1713 - [S1] 후보 추천하기 : 정렬 (0) | 2023.06.24 |
백준 입문자를 위한 IDE 및 제출 팁 (0) | 2023.06.22 |
백준 #2304 - [S2] 창고 다각형 : 구현 (0) | 2023.06.21 |