728x90
> 자료구조 활용 - 스택, 큐, 해쉬, 힙 (힙 편)
힙구조
최소힙은 부모가 자식들보다 무조건 작아야 함.
최소힙에서 pop하면 root값이 pop되고, 제일 오른쪽 밑(가장 밑의 레벨을 다 없애고 그 위의 레벨을 없애는 순서로) 의 값이 root로 올라가서 최소힙으로 다시 만든다 (다운-힙)
(다운-힙) 은 왼쪽 자식과 오른쪽 자식중에 더 작은 값과 부모와 비교해가며 swap하며 최소힙을 만든다.
📖 문제 : 최소힙
최소힙은 완전이진트리로 구현된 자료구조입니다. 그 구성은 부모 노드값이 왼쪽자식과 오른 쪽 자식노드의 값보다 작게 트리를 구성하는 것입니다. 그렇게 하면 트리의 루트(root)노드는 입력된 값들 중 가장 작은 값이 저장되어 있습니다. 예를 들어 5 3 2 1 4 6 7순으로 입력되 면 최소힙 트리는 아래와 같이 구성됩니다.
최소힙 자료를 이용하여 다음과 같은 연산을 하는 프로그램을 작성하세요. 1) 자연수가 입력되면 최소힙에 입력한다.
2) 숫자 0 이 입력되면 최소힙에서 최솟값을 꺼내어 출력한다.
(출력할 자료가 없으면 -1를 출력한다.) 3) -1이 입력되면 프로그램 종료한다.
입력설명
첫 번째 줄부터 숫자가 입력된다. 입력되는 숫자는 100,000개 이하이며 각 숫자의 크기는 정 수형 범위에 있다.
출력설명
2) 연산을 한 결과를 보여준다.
입력예제 1
5
3
6
0
5
0
2
4
0
-1
출력예제 1
3
5
2
import sys
import heapq as hp
a = []
while True:
n = int(input())
if n == -1:
break
if n == 0:
if len(a) == 0:
print(-1)
else:
print(hq.heappop(a))
else:
hq.heappush(a, n)
⭐️ Point ! ⭐️
- heapq를 이용하기 위해 서는 list가 필요함
- import heapq as hq
heapq 를 import하는데 hq이라는 단축어로 사용 - hq.heappop(a)
a 리스트에서 최소 힙 값 출력 (root에 있는 값 !) - hq.heappush(a, n)
a리스트에 최소 힙으로 n값을 push
출처
- 인프런 : 파이썬 알고리즘 문제 풀이
728x90
'Algorithm (Python, Java, SQL) > Inflearn Study' 카테고리의 다른 글
[Python Algorithm] 완전탐색 - 재귀함수를 이용한 이진수 출력 (1) | 2023.03.29 |
---|---|
[Python Algorithm] 자료구조(힙) - 최대힙 (1) | 2023.03.28 |
[Python Algorithm] 자료구조(리스트 해쉬) - 아나그램 (1) | 2023.03.28 |
[Python Algorithm] 자료구조(딕셔너리 해쉬) - 아나그램 (1) | 2023.03.28 |
[Python Algorithm] 자료구조(해쉬) - 단어찾기 (1) | 2023.03.28 |