티스토리 뷰
우선순위 큐는 각 원소들이 우선순위를 가지고 있고, 높은 우선순위의 원소가 낮은 우선순위의 원소보다 먼저 처리된다.
만약 우선순위가 동일하다면 먼저 들어온 원소를 처리한다.
우선순위는 힙을 통해 구현할 수 있다고 한다.
힙은, 완전 이진 트리로 부모 노드의 값이 항상 자식 노드보다 값이 작거나 큰 트리를 말한다.
부모 노드의 값이 항상 자식 노드보다 작은 경우를 최소힙(Min Heap)이라고 하며, 반대로 부모 노드의 값이 항상 자식 노드보다 큰 것은 최대 힙(Max Heap)이라 한다.
파이썬에는 Priority Queue와 heapq 내장 모듈이 있는데 오늘은 heapq에 대해 살펴보자.
heapq는 최소 힙 구조이고, 가장 작은 요소가 0번째에 위치한다.
또한 모든 k에 대해 heap[k] <= heap[2*k+1] 또는 heap[k] <= heap[2*k+2] 만족한다.
heappush()는 힙의 형태를 유지하면서(우선순위를 지정하여) item을 푸시하고,
pop()은 힙을 유지하며 우선순위가 가장 작은 원소를 pop하여 반환한다.
heapify()를 사용하여 리스트를 heap으로 변환할 수 있다.
그러면 백준과 프로그래머스의 힙 관련 문제풀이들을 살펴보자.
1. 백준 - #1927 최소 힙
https://live-for-myself.tistory.com/206
[CodingTest] 백준 #1927 최소 힙
https://www.acmicpc.net/problem/1927 1927번: 최소 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열..
live-for-myself.tistory.com
2. 백준 - #11279 최대 힙
https://live-for-myself.tistory.com/205
[CodingTest] 백준 #11279 최대 힙 / 힙큐 heapq
https://www.acmicpc.net/problem/11279 11279번: 최대 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배..
live-for-myself.tistory.com
3. 백준 - #11286 절댓값 힙
https://live-for-myself.tistory.com/207
[CodingTest] 백준 #11286 절댓값 힙
https://www.acmicpc.net/problem/11286 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배..
live-for-myself.tistory.com
4. 프로그래머스 - 더 맵게
https://live-for-myself.tistory.com/18
[CodingTest] 프로그래머스 Programmers 힙 Level 2 더 맵게
파이썬에는 heapify 메서드가 있고 최소힙으로 구현해준다. 힙은 오랜만에 봐서 개념이 가물가물했는데 개념을 보니 대충 생각이 났다. 힙의 좋은 점은 스택, 큐와 다르게 push와 pop을 하면 바로 자
live-for-myself.tistory.com
'알고리즘' 카테고리의 다른 글
[알고리즘] 탐욕법 Greedy Algorithm (0) | 2022.01.23 |
---|---|
[알고리즘] dfs와 bfs (0) | 2022.01.23 |
[알고리즘] 이분 탐색 (0) | 2022.01.23 |
[알고리즘] 동적계획법 (0) | 2022.01.23 |
[CodingTest] Python method 정리 (0) | 2021.11.16 |
- Total
- Today
- Yesterday
- 백준
- jsp
- append
- R
- Oracle
- jQuery
- 브루트 포스
- 스프링
- javascript
- Case When
- 덱
- Django
- 장고
- python
- 문자열
- 큐
- Java
- 자바
- html
- 고득점 키트
- 정렬
- CSS
- web
- 파이썬
- bootstrap
- 프로그래머스
- 단계별로풀어보기
- brute force
- baekjoon
- 자바스크립트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |