백준(S2) 11279번: 최대 힙(파이썬, Python3)및 heapq 설명

2022. 12. 26. 21:23·Python/백준 문제풀이
반응형

https://www.acmicpc.net/problem/11279

 

11279번: 최대 힙

첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0

www.acmicpc.net

나는 자료구조를 C언어로 배워서 최대 힙을 구현할 때 C언어는 구현하기 위해 10~20줄 정도 필요 한 것으로 알고 있는데 파이썬은  heapq를 import 하면 끝나는 것을 알고 매우 놀랐다... (정말 좋은 언어다 파이썬)

 

문제를 풀기 위해 heapq와 heapq의 함수들을 간단하게 설명하자면

우선 heapq는 최소힙으로 숫자들을 정렬한다.

부모노드가 자식노드보다 작은 힙을 최소 힙이라 한다. 오름차순과 비슷하지만 다른 면이 있다.

1
heapq.heappush(heap,(number))
cs

이렇게 heappush라는 함수를 사용하면  heap이라는 리스트에 number이라는 데이터를 최소히프에 준수해서 추가한다. 항상 값을 추가하면 값을 추출할줄도 알아야 한다.

1
num = (heapq.heappop(heap))
cs

heappop이라는 함수를 사용하면 heap에 있는 가장 작은 인자를 추출한다.(가장 위에 있는 인자를 추출한다)

그러나 이때 단점이 있다. heappop 함수는 heap에 인자가 없으면 에러를 발생시킨다.

그러므로 try except를 사용해서 함수를 사용하면 편리하다.

 

 

우선 첫째 줄에 연산의 개수가 주어지고 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수가 주어진다를 인지해야 한다. 그 후, 0이 입력되면 최대값을 출력하고 0이 아닐 때는 값을 넣는 규칙을 알아야 한다.

 

지금 문제 이름도 최대 히프고 우리가 필요한 데이터는 최대값인데 최소 히프로는 구현하기가 어렵다.

이럴 때 쉽게 사용할 수 있는 방법이 있다.

 

1
heapq.heappush(heap,(-num))
cs

이렇게 값을 음수값으로 저장 한 뒤 

1
num = (-1 * heapq.heappop(heap))
cs

추출할 때 -1을 곱해준 값으로 추출을 하면 최대 히프를 쉽게 구현할 수 있다.

 

정답 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import heapq
import sys
heap = []
number = int(input())
for i in range(number):
    mis_num = int(sys.stdin.readline())
    if mis_num != 0:
        heapq.heappush(heap,(-num))
    else:
        try:
            num = (-1 * heapq.heappop(heap))
            print(num)
        except:
            print("0")
cs

 

반응형
'Python/백준 문제풀이' 카테고리의 다른 글
  • 백준(B1) 2748번: 피보나치 수 2(파이썬, Python) *시간 초과 문제 해결 방법
  • 백준(S2) 1927번: 최소 힙(파이썬, Python3)
  • 백준(S5) 11866번: 요세푸스 문제 0 (파이썬, Python3)
  • 백준(S3) 14425번: 문자열 집합 (파이썬,Python3)
코딩하는_대학생
코딩하는_대학생
Java Developer, Open Source Enthusiast, Proud Son
  • 코딩하는_대학생
    코딩하는 대학생에서 개발자까지
    코딩하는_대학생
  • 전체
    오늘
    어제
    • 분류 전체보기 (217)
      • 코딩하는 대학생의 책 추천 (8)
        • 클린코드 (5)
        • 헤드퍼스트 디자인패턴 (3)
      • Backend (7)
        • Spring (14)
        • AWS (3)
        • 회고 (4)
        • Redis (5)
        • 다양한 시각에서 바라본 백엔드 (3)
      • Python (35)
        • 개념 및 정리 (15)
        • 백준 문제풀이 (20)
      • JAVA (17)
        • 개념 및 정리 (14)
        • 백준 문제풀이 (2)
      • 왜? (7)
      • C언어 (42)
        • 개념 및 정리 (9)
        • 백준 문제풀이 (32)
      • 개인 공부 (27)
        • 대학 수학 (5)
        • 대학 영어 (10)
        • 시계열데이터 처리 및 분석 (5)
        • 컴퓨터 네트워크 (6)
        • 운영체제 (1)
      • 솔직 리뷰 (23)
        • 꿀팁 (6)
        • IT기기 (1)
        • 국내 여행 (7)
        • 맛집 (2)
        • 알바 리뷰 (2)
      • 대외활동 (17)
        • 체리피우미 3기 (4)
        • 꿀잠이들 6기 (13)
      • 음식 평가 (1)
      • 일상 & 근황 (2)
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩하는_대학생
백준(S2) 11279번: 최대 힙(파이썬, Python3)및 heapq 설명
상단으로

티스토리툴바