본문 바로가기
알고리즘/BOJ

[BOJ] 2075번 N번째 큰 수 / 사용언어 : 파이썬(python)

by 바른 호랑이 2022. 2. 10.
728x90
반응형

※ 문제링크

 

2075번: N번째 큰 수

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

www.acmicpc.net

해당문제는 우선순위큐 자료구조를 통해 값을 저장하고 정렬하여야 풀 수 있는 문제였다. 파이썬에서는 heapq로 해당 자료구조를 지원해주고 있기에 활용하여 해결하였다. 주의해야할 점은 문제의 메모리제한이 상당하기 때문에 입력값을 모두 저장한 후 정렬후 값을 꺼내서 출력하면 안된다는 점이다. 문제의 조건에 의하면 n번째로 입력받은 값들 중 1개값은 무조건 n-1번째로 입력받은 값들 보다 크다는 점을 이용하여 문제를 해결하였다. 자세한 문제풀이방법과 코드는 아래와 같다.

1. 입력받은 값을 반복문을 활용하여 바로바로 입력 및 비교를 할 수 있게 구현한다.

2. 첫번째로 입력받은 N개의 수는 모두 heap자료구조에 넣어주고, 2번째부터는 가장 작은 값을 heappop을 통해 꺼낸 후 입력받은 값들과 비교하며 꺼낸 값보다 입력값이 크면 입력값을 heap에 넣어주고 아니면 꺼낸값을 다시 heap에 넣어준다.

3. 반복문 종료 후 heappop명령어로 값을 꺼낸 후 출력해준다. + 시간 및 메모리 절감을 위해 sys를 사용해주었다.

 

from heapq import heappush, heappop
import sys

# input = sys.stdin.readline
N = int(input())
heap = []
for i in range(N):
    if i == 0:
        for number in list(map(int, input().split())):
            heappush(heap, number)
    else:
        for number in list(map(int, input().split())):
            cp = heappop(heap)
            if cp < int(number):
                heappush(heap, number)
            else:
                heappush(heap, cp)    

print(heappop(heap))

 

P.S 더 나은 개발자가 되기위해 공부중입니다. 잘못된 부분을 댓글로 남겨주시면 학습하는데 큰 도움이 될 거 같습니다.

728x90
반응형

댓글