728x90
반응형
https://www.acmicpc.net/problem/1927
우선순위 큐를 사용하여 푸는 문제이다.
우선순위 큐의 삽입, 삭제 시간 복잡도는 O(log N)이다.
파이썬에서 우선순위큐인 heapq 모듈을 제공한다.
heapq의 경우 사용방법이 특이한데 따로 리스트를 만들고 이 리스트를 heapq 메소드의 인자로 사용해야 한다.
1. 삽입 : heapq.heappush( list, value )
import heapq
li=[]
heapq.heappush(li, 10)
heapq.heappush(li, 20)
heapq.heappush(li, 15)
2. 삭제 : heapq.heappop( list )
리스트에 들어있는 값 중 가장 작은 값을 삭제 후 반환한다.
import heapq
li=[]
heapq.heappush(li, 10)
heapq.heappush(li, 20)
heapq.heappush(li, 15)
a=heapq.heappop(li)
b=heapq.heappop(li)
c=heapq.heappop(li)
print(a, b, c)
결과
10 15 20
3. 최소 값 얻기 : list[0]
heapq 모듈을 사용하여 리스트에 값을 넣을 때 항상 가장 작은 값이 인덱스 0에 존재한다.
참고로 오름차순으로 정렬하는 게 아니다.
기본적으로 heapq는 최소 힙이기 때문에 만약 최대 힙으로 바꾸고 싶다면 단순히 값을 넣을 때 음수로 바꾸어서 넣고 값을 뺄 때 양수로 바꾸어서 빼내면 된다.
<전체 코드>
import sys
import heapq
input=sys.stdin.readline
n=int(input())
q=[]
for _ in range(n):
x=int(input())
if (x==0):
if len(q)==0:
print(0)
else:
print(heapq.heappop(q))
else:
heapq.heappush(q, x)
728x90
반응형
'백준 알고리즘 > 기타' 카테고리의 다른 글
[JS] 알고리즘 문제 풀이 용 자바스크립트 문법 (업데이트 중) (0) | 2024.06.01 |
---|---|
[백준 17386][파이썬] 선분 교차 1 (0) | 2023.04.25 |
[백준 1629][파이썬] 곱셈 (0) | 2023.02.28 |
[백준 1541][파이썬] 잃어버린 괄호 (0) | 2023.02.27 |
[백준 10986][파이썬] 나머지 합 (0) | 2023.02.21 |
댓글