Notice
Recent Posts
Recent Comments
Link
DevKim
[Python] 프로그래머스 LV.03 - 이중우선순위큐 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/42628
[ 알고리즘 ]
힙 큐 알고리즘
[ 접근 방법 ]
최대힙과 최소힙 두개를 써서 해결하느냐, 최소힙 하나로 해결하느냐로 결정되는 문제이다.
최소힙에서 최대값을 pop할 수 없으니 다른 방법으로 생각을 해봐야한다.
그렇다고 Level.03 문제인데 힙을 2개를 써서 무식하게 풀라고 낸 문제는 아닌 것 같았다.
해답은 heapq.nsmallest에 있다.
heapq.nsmallest(n,iterable) 을 사용하여 가장 최대인 값을 제외하고 최소인 것들로 다시 힙을 만들어주면된다.
백트래킹 풀다가 이 문제를 보니 너무 사랑스러울 지경이다 ㅎ ㅎ..
[ 코드 ]
import heapq
def solution(operations):
heap = []
for data in operations:
a = data.split(' ')[0]
b = data.split(' ')[1]
if a == 'I':
b = int(b)
heapq.heappush(heap, b)
elif a == 'D':
if len(heap) == 0:
continue
if b == '-1':
heapq.heappop(heap)
else:
heap = heapq.nsmallest(len(heap) - 1, heap)
if len(heap)==0:
return [0,0]
else:
return[max(heap),min(heap)]
728x90
'알고리즘 PS' 카테고리의 다른 글
[Python] 2021 카카오 인턴십 기출문제 - 거리두기 확인하기 (0) | 2021.07.20 |
---|---|
[Python] 삼성 sw 기출 문제 - 마법사 상어와 비바라기 (0) | 2021.07.03 |
[Python] 프로그래머스 LV.02 - 2개 이하로 다른 비트 (0) | 2021.07.01 |
[Python] LV.02 - 행렬 테두리 회전하기 (0) | 2021.06.30 |
[Python] 프로그래머스 LV.02 - 괄호 회전 (0) | 2021.06.30 |
Comments