![article thumbnail image](https://blog.kakaocdn.net/dn/bQODBQ/btrmNpi9V48/o8bnegrrUhfcJDOy6xQyJk/img.png)
반응형
문제
1927번: 최소 힙
첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0
www.acmicpc.net
11279번: 최대 힙
첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가
www.acmicpc.net
풀이
위 두 문제는 python의 heapq 모듈을 사용하면 쉽게 풀 수 있는 문제입니다.
문제 제목에서도 풀이를 유추할 수 있었지만 입력으로 주어지는 최대 N이 100,000인 만큼 단순하게 배열을 이용해 최댓값, 최소값을 찾는 방식은 시간초과가 날 것 입니다. 따라서 우선순위 큐를 도입하여 풀이를 해야합니다.
최소 힙
import heapq, sys
input = sys.stdin.readline
heap = []
for _ in range(int(input())):
x = int(input())
if x == 0:
if heap:
print(heapq.heappop(heap))
else:
print(0)
else:
heapq.heappush(heap, x)
최대 힙
파이썬의 경우 heapq가 최소 힙을 만들어주기 때문에 최대 힙을 구현하려면 아래의 코드 14번 라인과 같이 음수로 값을 heap에 집어넣어준 뒤 값을 뽑을 때 다시 양수로 고쳐주는 방식을 사용합니다.
import heapq, sys
input = sys.stdin.readline
heap = []
for _ in range(int(input())):
x = int(input())
if x == 0:
if heap:
print(-heapq.heappop(heap))
else:
print(0)
else:
# 원소를 음수로 넣어주면 최소힙을 최대힙처럼 구현가능
heapq.heappush(heap, -x)
Python heapq에 대한 포스팅
[Python] heapq 모듈
Python heapq 모듈 사용법 heapq 모듈에 대한 내용에 들어가기 앞서.. heap에 대한 내용은 아래 블로그 포스팅을 참고하시면 이해하시는데 도움이 될 것 같습니다. [자료구조] 우선순위 큐와 heap 우선순
kjhoon0330.tistory.com
'Algorithm > 백준' 카테고리의 다른 글
[BOJ] 14889 스타트와 링크 - Python (0) | 2022.01.02 |
---|---|
[BOJ] 1655 가운데를 말해요 - Python (0) | 2021.12.05 |
[BOJ] 2075 N번째 큰 수 - Python (0) | 2021.12.04 |
[BOJ] 22781 징검다리 건너기 - Python (9) | 2021.11.20 |
[BOJ] 백준 20444: 색종이와 가위 - Python (0) | 2021.11.19 |