[파이썬] heapq 힙큐 사용하기

2022. 3. 22. 12:00·Python/파이썬 함수

Heapq Document

Python docs homepage

 

 

1. Heap 이란?


힙은 최댓값과 최솟값을 찾는 연산에 특화된 완전 이진트리이다. 힙의 종류로는 최소힙과 최대힙이 있는데, 자료값이 낮은 것이 루트로 오면 최소힙, 자료값이 높은 것이 루트로 오면 최대힙이라고 한다. 이를 이용해 우선순위를 쉽게 정할 수 있다는 장점이 있다.

이런 우선순위 힙을 이용한 대표적인 예로는 우선순위 힙을 사용한 개선된 다익스트라 알고리즘이다.

 

파이썬에서 힙을 사용하기위해 heapq를 선언하는 방법은 아래와 같다.

import heapq

 

 

 

2. heapq의 메소드


  • heapq.heapify(iterable)

원래 있던 리스트를 힙으로 사용하기위해서는 먼저 힙화(heapify)를 진행해야하는데, 위의 메소드를 사용해 쉽게 진행할 수 있다. Heapify의 디폴트값은 최소힙이다.

 

 

  • heapq.heappush(heap, item)

heappush를 이용하면 Heapify된 상태를 유지하면서 값을 넣을 수 있다.

 

 

  • heapq.heappop(heap)

루트에 있는 값을 pop한다.

 

 

 

3. 최대힙 만들기


튜플을 (-값, 값)으로 구성하면 첫번째 값인 (-값)에 따라 힙정렬이 진행된다. heappop을 진행할 때 인덱스 1의 값을 취해주면 최대힙을 사용할 수 있다.

import heapq

arr = [3, 2, 4, 1, 7, 5, 6]
heap = []

for i in arr:
	heapq.heappush(heap, (-i, i))

print(heap)

while heap:
	print(heapq.heappop(heap)[1], end=" ")

 

결과값

>> [(-7, 7), (-4, 4), (-6, 6), (-1, 1), (-2, 2), (-3, 3), (-5, 5)]
>> 7 6 5 4 3 2 1 

 

 

 

4. Heapify된 리스트를 힙정렬하기


리스트를 힙으로 만든 다음, heappop을 통해 순서대로 값을 꺼내 리스트에 append하면 정렬된 리스트를 반환할 수 있다.

import heapq

heap = [3, 2, 4, 1, 7, 5, 6]
heapq.heapify(heap)

sorted_arr = []
while heap:
	sorted_arr.append(heapq.heappop(heap))

print(sorted_arr)

 

'Python/파이썬 함수' 카테고리의 다른 글
  • [파이썬] any()와 all()
  • [파이썬] 배열에 사용되는 함수
  • [파이썬] 파이썬에서 스택 & 큐 구현하기
  • [파이썬] 내가 보려고 만든 문자열 함수 2
gakko
gakko
좌충우돌 개발기
  • gakko
    MYVELOP 마이벨롭
    gakko
  • 전체
    오늘
    어제
    • 분류 전체보기 (203)
      • Spring (23)
        • Spring (10)
        • Spring Boot (7)
        • Spring Security (1)
        • Hibernate (4)
      • Test (3)
      • 끄적끄적 (6)
      • 활동 (35)
        • 부스트캠프 (23)
        • 동아리 (3)
        • 컨퍼런스 (3)
        • 글또 (5)
        • 오픈소스 컨트리뷰션 (1)
      • 디자인패턴 (0)
      • Git & GitHub (22)
        • Git (13)
        • Github Actions (1)
        • 오류해결 (5)
        • 기타(마크다운 등) (3)
      • 리눅스 (6)
        • 기초 (6)
        • 리눅스 서버 구축하기 (0)
      • Infra (2)
        • Docker (1)
        • Elastic Search (0)
        • Jenkins (1)
        • AWS (1)
      • MySQL (7)
        • 기초 (6)
        • Real MySQL (1)
      • 후기 (3)
        • Udemy 리뷰 (3)
      • CS (26)
        • 웹 기본지식 (0)
        • 자료구조 (13)
        • 운영체제 OS (12)
        • 데이터베이스 (1)
        • 시스템 프로그래밍 (0)
        • 기타 (0)
      • Tools (1)
        • 이클립스 (1)
        • IntelliJ (0)
      • 프로젝트 (1)
        • 모여모여(부스트캠프) (1)
      • JAVA (32)
        • Maven (6)
        • 오류해결 (11)
        • 자바 클래스&메소드 (1)
        • JSP & Servlet (12)
      • Javascript (5)
        • 기초 (3)
        • React (2)
      • Python (28)
        • 파이썬 함수 (9)
        • 알고리즘 문제풀이 (16)
        • 데이터 사이언스 (2)
        • 웹 크롤링 (1)
      • 단순정보전달글 저장소 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 우진님
  • 공지사항

  • 인기 글

  • 태그

    자바
    부스트캠프
    알고리즘
    GitHub
    오류해결
    java
    자바스크립트
    Git
    파이썬
    부스트캠프 7기
    jsp
    Python
    MySQL
    os
    스프링부트
    운영체제
    부스트캠프 멤버십
    Spring
    웹개발
    스프링
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
gakko
[파이썬] heapq 힙큐 사용하기
상단으로

티스토리툴바