728x90
최대힙과 최소힙.
heapq는 이진트리형태로 구성이 되어있다.
heapq.heappush를하게되면 파이썬은 자동으로 최소힙이 구성되게된다.
즉 heapq에 넣었다 빼기만해도 오름차순 정렬이 된다는말이다.
heapq를 활용한 문제풀이
N번째 큰 수 성공
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 | 12 MB (하단 참고) | 18632 | 7530 | 5351 | 39.552% |
문제
N×N의 표에 수 N2개 채워져 있다. 채워진 수에는 한 가지 특징이 있는데, 모든 수는 자신의 한 칸 위에 있는 수보다 크다는 것이다. N=5일 때의 예를 보자.
12 | 7 | 9 | 15 | 5 |
13 | 8 | 11 | 19 | 6 |
21 | 10 | 26 | 31 | 16 |
48 | 14 | 28 | 35 | 25 |
52 | 20 | 32 | 41 | 49 |
이러한 표가 주어졌을 때, N번째 큰 수를 찾는 프로그램을 작성하시오. 표에 채워진 수는 모두 다르다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다.
출력
첫째 줄에 N번째 큰 수를 출력한다.
예제 입력 1 복사
5
12 7 9 15 5
13 8 11 19 6
21 10 26 31 16
48 14 28 35 25
52 20 32 41 49
예제 출력 1 복사
35
문제풀이:
import sys
import heapq
input = sys.stdin.readline
n = int(input().strip())
hq = []
for _ in range(n):
nums=list(map(int,input().split()))
if not hq:
for num in nums:
heapq.heappush(hq,num)
else:
for num in nums:
if hq[0]<num:
heapq.heappush(hq,num)
heapq.heappop(hq)
print(hq[0])
더보기
해설:
hq 리스트에 값이 없다면 ?
heapq.heappush를이용해서 hq리스트에 해당하는 num값을 차례대로 넣는다.
그러면 자동으로 오름차순정렬이되면서 이진트리의 형태를 띌것이다. 예제로 그림을 넣어보겠다.
12 6 9 15 5 리스트 다음과 같은 형태가 된다.
더보기
변환 후
이런형태로 계속 찾아보면
최상단 노드에는 5번째로 큰수가 나오게 될 것이다.
728x90
'코딩테스트 문제풀이' 카테고리의 다른 글
LIS(Longest Increasing Subsequence) 알고리즘 (0) | 2022.12.27 |
---|---|
[python3] 1316번 그룹단어체커 (구현) (0) | 2022.12.27 |
[python3] 전쟁-전투 DFS풀이 (0) | 2022.12.17 |
[python3] 유레카 이론 (0) | 2022.12.13 |
[python3] 2583번 :영역구하기 (0) | 2022.12.10 |