티스토리 뷰
1. heapq
- 사용 이유
- 데이터를 정렬된 상태로 저장하기 위해서 사용하는 파이썬 heapq(힙큐)
- 힙 자료구조
- 자바의 PriorityQueue 와 유사
- headq 모듈은
- 모든 부모 노드는 그의 자식 노드보다 값이 작거나 큰 이진트리 구조
- 인덱스 0 부터 시작해 k번째 원소가 항상 자식 원소들(2k+1, 2k+2) 보다 작거나 같은 최소 힙 형태로 정렬된다
- 사용법
- heapq.heappush(heap,item) : item을 heap에 추가
- heapq.heappop(heap) ; heap 에서 가장 작은 원소를 pop & 리턴. 비어있는 경우 indexErr
- heapq.heapify(x) : 리스트 x를 즉각적으로 heap으로 변환 (in linear tiem, O(N))
- 기본적으로 MinHeap 형태로 저장됨.
- 원소의 추가시..
import heapq heap = [] heapq.heappush(heap, 50) heapq.heappush(heap, 10) heapq.heappush(heap, 20) print(heap) [10,50,20] ==>> minHeap
- 최대 힙으로 변경하려면 별도의 과정이 필요
+ 최대 힙
- heapq 모듈은 최소 힙만 동작하기 때문에 최대 힙으로 하기 위해 요령이 필요
- 힙에 튜플(tuple)을 원소로 추가하거나 삭제하면, 튜플 내에서 맨 앞에 있는 값을 기준으로 최소 힙이 구성되는 원리를 이용한다
- 따라서, 최대 힙을 만들려면 각 값에 대한 우선순위를 구한 후, (우선 순위, 값) 구조의 튜플(tuple)을 힙에 추가하거나 삭제하면 됩니다. 그리고 힙에서 값을 읽어올 때는 각 튜플에서 인덱스 1에 있는 값을 취하면 됩니다. (우선순위에는 관심이 없으므로 )
'코딩테스트' 카테고리의 다른 글
[파이썬] input() 과 sys.stdin.readline() 사용시 주의 ! (0) | 2022.03.19 |
---|
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 프로그래머스 # 음양더하기
- 10진수
- 킹
- 카카오 코딩테스트
- 1063
- 자료구조
- 2진수
- 알고리즘
- 구현
- 크레인 인형뽑기 게임
- 인형뽑기
- 프로그래머스
- java
- 자료표현
- K번째수
- Git
- 오
- 코딩테스트
- ASCII코드
- 2019 카카오 개발자 겨울 인턴십
- stack
- 백준
- 브루트포스
- solved.ac
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함