문제
https://school.programmers.co.kr/learn/courses/30/lessons/42628
내 풀이 - 최소힙, 최대힙 둘다 만들기
- 조건
- 명령어 : [명령어, 숫자]
- 모든 연산을 처리한 후 큐가 비어있으면 [0,0]
- 큐가 비어있지 않으면 [최댓값, 최솟값]을 return
- 내 아이디어 : 최소힙, 최대힙 두 가지 자료구조를 만들어서 명령어에 따라 다르게 처리하기
- 이렇게 푼 사람들도 있고, 리스트 max함수로 그때그때 최댓값 연산 하는 사람도 있음
'''
- 명령어 : [명령어, 숫자]
- 모든 연산을 처리한 후 큐가 비어있으면 [0,0]
- 큐가 비어있지 않으면 [최댓값, 최솟값]을 return
- 아이디어 : 최소힙, 최대힙 두 가지 자료구조를 만들어서 명령어에 따라 다르게 처리하기
- 최댓값/최솟값을 삭제하는 연산에서 최댓값/최솟값이 둘 이상인 경우, 하나만 삭제합니다.
'''
import heapq
def solution(operations):
answer = []
min_heap = [] #최소힙
max_heap = [] #최대힙
for o in operations:
d = o.split()
if d[0] == "I":
heapq.heappush(min_heap, int(d[1])) #최소힙
heapq.heappush(max_heap, -int(d[1])) #최대힙
else:
if min_heap:
if d[1] == "1":
#최댓값을 삭제
min_heap.remove(-heapq.heappop(max_heap))
else:
#최솟값을 삭제
max_heap.remove(-heapq.heappop(min_heap))
if min_heap:
return [-heapq.heappop(max_heap), heapq.heappop(min_heap)]
else:
return [0, 0]
'개발 > Algorithm' 카테고리의 다른 글
| [프로그래머스/43162/level3/고득점kit] 네트워크 (2) | 2023.09.12 |
|---|---|
| [프로그래머스/42583/level2/고득점kit] 다리를 지나는 트럭 - 큐, sum 사용 시간초과 해결 (0) | 2023.09.05 |
| [프로그래머스/42884/level3/고득점kit] 단속 카메라 - 그리디 (0) | 2023.08.30 |
| [프로그래머스/42626/level2/고득점kit] 더 맵게 - Heap 정렬 / 우선순위 큐 / 최소 힙 (0) | 2023.08.30 |
| [프로그래머스/42861/level3/고득점kit] 섬 연결하기 - 최소신장트리, 크루스칼 Kruskal 알고리즘 (0) | 2023.08.22 |