알고리즘
[백준(BOJ)] 1927번 최소 힙, 11279번 최대 힙
욘아리
2024. 1. 7. 21:27
문제
https://www.acmicpc.net/problem/1927
1927번: 최소 힙
첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0
www.acmicpc.net
https://www.acmicpc.net/problem/11279
11279번: 최대 힙
첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0
www.acmicpc.net
주어진 연산에 따라 배열에 자연수를 추가하거나, 배열에서 가장 작거나 큰 값을 출력하고 제거하는 프로그램을 만드는 문제다.
예시
최소 힙 Example :
Input : 9
0
12345678
1
2
0
0
0
0
32
Output : 0
1
2
12345678
0
최대 힙 Example :
Input : 13
0
1
2
0
0
3
2
1
0
0
0
0
0
Output : 0
2
1
3
2
1
0
0
풀이
import heapq
import sys
n = int(sys.stdin.readline())
arr = []
for _ in range(n):
x = int(sys.stdin.readline())
if x == 0:
if arr:
print(heapq.heappop(arr))
else:
print(0)
else:
heapq.heappush(arr, x)
- heappush()로 자연수 x를 추가하고, heappop()으로 최소 힙에서 가장 작은 값을 출력하고 제거한다.
import heapq
import sys
n = int(sys.stdin.readline())
arr = []
for _ in range(n):
x = int(sys.stdin.readline())
if x == 0:
if arr:
print(-heapq.heappop(arr))
else:
print(0)
else:
heapq.heappush(arr, -x)
- 위에 풀이와 거의 유사하나 최대 힙처럼 활용하기 위해 음수(-x)로 추가하고 가장 큰 값을 출력하고 제거하기 위해 '-'를 추가하여 원래의 값으로 반환한다.