Algorithm/📊 Problem Solving

[백준/BOJ] 2075 - N번째 큰 수

posted by sangmin

2075 - N번째 큰 수

📌 문제

N×N의 표에 수 N2개 채워져 있다. 채워진 수에는 한 가지 특징이 있는데, 모든 수는 자신의 한 칸 위에 있는 수보다 크다는 것이다. N=5일 때의 예를 보자.

image

이러한 표가 주어졌을 때, N번째 큰 수를 찾는 프로그램을 작성하시오. 표에 채워진 수는 모두 다르다.

📋 코드

import heapq

N = int(input())

q = []
for i in range(N):
    arr = list(map(int, input().split()))
    for num in arr:
        heapq.heappush(q, num)

    while len(q) > N:
        heapq.heappop(q)

print(heapq.heappop(q))

💡 한마디

처음 시도할 때에는 최대 힙으로 접근했다. 숫자에 마이너스(-)를 붙여 힙에 모두 넣은 뒤 N번째 뺀 값이 정답이지 않을까 생각했다. 물론 답은 맞게 떴지만 2차원 배열을 전부 입력받고, 모든 수를 힙에 넣어 진행한 탓에 메모리 초과가 떴다.

다른 사람 풀이를 참고하여 푼 결과 코드는 위와 같다. 2차원 배열 한 행씩 힙에 넣고, 힙에 들어있는 수의 개수가 N이 될때까지 다시 빼줬다. 그 결과 힙에는 매 순간마다 가장 큰 N개의 수가 남아있게 된다.

 

2075번: N번째 큰 수

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

www.acmicpc.net

 

'Algorithm > 📊 Problem Solving' 카테고리의 다른 글

[백준/BOJ] 3273 - 두 수의 합  (0) 2021.02.19
[백준/BOJ] 2428 - 표절  (0) 2021.02.17
[백준/BOJ] 2559 - 수열  (0) 2021.02.15
[백준/BOJ] 10025 - 게으른 백곰  (0) 2021.02.15
[백준/BOJ] 2018 - 수들의 합 5  (0) 2021.02.15