Notice
Recent Posts
Recent Comments
Link
매일 매일 미라클 코딩
[Lv.3] 프로그래머스 - 이중우선순위큐 본문
[접근]
처음엔 최소힙과 최대힙을 두 개 만들어서 각각 연산했는데, 그럴필요가 없었다.
heapq 라이브러리에 최댓값을 조회하는 메소드가 있다.
heapq.nlargest( n , list ) # list 중에서 가장 큰 값 n 개 조회
반대로 가장 작은 값 n 개 조회는 heapq.smallest(n,list) 이다
=> 따라서 힙 길이만큼을 조회하면 전체 인자가 내림차순으로 정렬된다.
=> 인덱스 1부터 슬라이싱 하면 최댓값이 제외된 나머지 리스트가 되고 이를 다시 heapify 한다.
import heapq
def solution(operations):
answer = []
hq = []
heapq.heapify(hq)
for oper in operations:
op = oper.split()
if op[0] =="I":
heapq.heappush(hq,int(op[1])) #오름차순
elif op[0] =="D" and op[1] == '1' : #최댓값삭제
if hq:
hq = heapq.nlargest(len(hq),hq)[1:]
heapq.heapify(hq)
elif op[0] =="D" and op[1] == '-1': # 최솟값 삭제
if hq:
heapq.heappop(hq)
if hq:
answer.append(heapq.nlargest(1,hq)[0])
answer.append(heapq.heappop(hq))
else:
answer = [0,0]
return answer
* 주의할 점 1) operation의 경우문자열을 split 했기에 조건문에서 int 화하든지 문자열과 비교해야한다.
2) 힙안에 원소가 있을 때만 명령을 수행하도록 조건을 두지 않으면 런타임 에러가 발생한다.
'알고리즘' 카테고리의 다른 글
[Lv.2] 프로그래머스 - 방문길이 (0) | 2021.06.23 |
---|---|
[Lv.2] 프로그래머스 - 게임 맵 최단 거리 (0) | 2021.06.23 |
[Lv.2] 프로그래머스 - 행렬의 곱 (0) | 2021.06.22 |
[Lv.2] 프로그래머스 - 다리를 지나는 트럭 (0) | 2021.06.22 |
[ Lv.2] 프로그래머스 - 프린터 (0) | 2021.06.22 |