https://school.programmers.co.kr/learn/courses/30/lessons/42628
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
"""
입출력 예시)
operations = ["I 16", "I -5643", "D -1", "D 1", "D 1", "I 123", "D -1"] -> [0,0]
operations = ["I -45", "I 653", "D 1", "I -642", "I 45", "I 97", "D 1", "D -1", "I 333"] -> [333, -45]
"""
import heapq
def solution(operations):
answer = []
heap = [] # 힙 생성
for oper in operations:
if oper[0] == 'I': # 명령어가 'I'인 경우
heapq.heappush(heap, int(oper[2:])) # 공백 뒤의 숫자를 heap에 삽입 ('I' + (공백) + 숫자)
else: # 명령어가 'D'인 경우
if len(heap) == 0: # 힙이 비어있으면 pass (-> 빈 큐에 데이터를 삭제하라는 연산이 주어질 경우, 해당 연산은 무시)
pass
elif oper[2] == '-': # 공백 뒤에 '-'가 있는 경우
heapq.heappop(heap) # heap에서 최솟값을 삭제
else: # 공백 뒤에 바로 1이 오는 경우
heap = heapq.nlargest(len(heap), heap)[1:] # heap에서 최댓값을 찾아서 이 최댓값을 제외하고 리스트 힙에 삽입
heapq.heapify(heap) # 리스트 힙을 heap으로 변환
if heap: # 힙이 비어있지 않으면
answer.append(max(heap)) # 최댓값
answer.append(min(heap)) # 최솟값
else: # 힙이 비어있으면
answer.append(0)
answer.append(0)
return answer
- heapq
- heapq.heappush(heap, item) : item을 heap에 추가
- heapq.heappop(heap) : heap에서 가장 작은 원소를 pop & 리턴, 비어 있는 경우 IndexError
- heapq.heapify(x) : 리스트 x를 즉각적으로 heap으로 변환
- 힙에서 최댓값 찾기
- heapq.nlargest(n, iterable, key=None)
- 힙에서 최솟값 찾기
- heapq.nsmallest(n, iterable, key=None)
https://docs.python.org/ko/3/library/heapq.html
heapq — 힙 큐 알고리즘 — Python 3.10.6 문서
heapq — 힙 큐 알고리즘 소스 코드: Lib/heapq.py 이 모듈은 우선순위 큐 알고리즘이라고도 하는 힙(heap) 큐 알고리즘의 구현을 제공합니다. 힙은 모든 부모 노드가 자식보다 작거나 같은 값을 갖는
docs.python.org
- operations=["I -45", "I 653", "D 1", "I -642", "I 45", "I 97", "D 1", "D -1", "I 333"] 의 연산 과정
"""
1) I -45: -45 삽입 -> [-45]
2) I 653: 653 삽입 -> [-45, 653]
3) D 1: 최댓값(653) 삭제 -> [-45]
4) I -642: -642 삽입 -> [-642, -45]
5) I 45: 45 삽입 -> [-642, -45, 45]
6) I 97: 97 삽입 -> [-642, -45, 45, 97]
7) D 1: 최댓값(97) 삭제 -> [-642, -45, 45]
8) D -1: 최솟값(-642) 삭제 -> [-45, 45]
9) I 333: 333 삽입 -> [-45, 45, 333]
10) [-45, 45, 333]에서 최댓값과 최솟값 return -> [333, -45]
"""
참고)
https://littlefoxdiary.tistory.com/3
[Python] 힙 자료구조 / 힙큐(heapq) / 파이썬에서 heapq 모듈 사용하기
힙은 특정한 규칙을 가지는 트리로, 최댓값과 최솟값을 찾는 연산을 빠르게 하기 위해 고안된 완전이진트리를 기본으로 한다. 힙 property : A가 B의 부모노드이면 A의 키값과 B의 키값 사이에는 대
littlefoxdiary.tistory.com
https://velog.io/@norighthere/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-Python-%EC%9D%B4%EC%A4%91%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84%ED%81%90
[프로그래머스 / Python] 이중우선순위큐
🧑🏻💻 문제링크파이썬의 heapq 모듈은 기본적으로 Min Heap 구조를 갖는다. 그렇기 때문에 heappop()을 하게되면 가장 heap에서 최솟값을 빼게 된다.처음에 생각했던 방법은 max_heap, min_heap 두 개의
velog.io