알고리즘
[프로그래머스] 이중 우선 순위 큐 (python)
yjenis
2024. 7. 3. 12:43

문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42628
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제

풀이
- 1T( 실패: IndexError: index out of range )
import heapq
def solution(operations):
# 최대힙, 최소힙 빈 리스트
max_pq=[]
min_pq=[]
for i in operations:
# I면 숫자 삽입
# 최소는 그대로, 최대는 -붙여서
# 숫자 빼고 넣을 땐, 최소 최대 둘다 적용
if i[0]=='I':
_,num=i.split(' ')
num=int(num)
heapq.heappush(min_pq,num)
heapq.heappush(max_pq,-num)
# 최소힙 1번 삭제, 최대힙에선 찾아서 삭제
elif i=='D -1':
min_val=heapq.heappop(min_pq)
max_pq.remove(-min_val)
heapq.heapify(max_pq)
elif i=='D 1':
max_val=heapq.heappop(max_pq)
min_pq.remove(-max_val)
heapq.heapify(min_pq)
if not min_pq:
return [0,0]
else:
max_val = -max_pq[0]
min_val = min_pq[0]
return [max_val, min_val]
heapq.heappop을 호출할 때 힙이 비어 있는 경우를 고려해야 한다.
따라서
elif operation == 'D -1' and min_pq:
elif operation == 'D 1' and max_pq:
로 뒤에 리스트가 존재한다는 조건을 추가로 붙여줬다.
- 2T(성공)
import heapq
def solution(operations):
# 최대힙, 최소힙 빈 리스트
max_pq=[]
min_pq=[]
for i in operations:
# I면 숫자 삽입
# 최소는 그대로, 최대는 -붙여서
# 숫자 빼고 넣을 땐, 최소 최대 둘다 적용
if i[0]=='I':
_,num=i.split(' ')
num=int(num)
heapq.heappush(min_pq,num)
heapq.heappush(max_pq,-num)
# 최소힙 1번 삭제, 최대힙에선 찾아서 삭제
elif i=='D -1'and min_pq:
min_val=heapq.heappop(min_pq)
max_pq.remove(-min_val)
heapq.heapify(max_pq)
elif i=='D 1'and max_pq:
max_val=heapq.heappop(max_pq)
min_pq.remove(-max_val)
heapq.heapify(min_pq)
if not min_pq:
return [0,0]
else:
max_val = -max_pq[0]
min_val = min_pq[0]
return [max_val, min_val]