개발/문제풀이

백준 1927번 최소 힙 파이썬 문제풀이

2021. 2. 15. 20:37
목차
  1. 문제해설
  2. 정답 코드
반응형

문제 링크 : www.acmicpc.net/problem/1927

 

1927번: 최소 힙

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

www.acmicpc.net


힙이란?

힙(heap)은 최댓값 및 최솟값을 찾아내는 연산을 빠르게 하기 위해 고안된 완전이진트리(complete binary tree)를 기본으로 한 자료구조(tree-based structure)로서 다음과 같은 힙 속성(property)을 만족한다.

A가 B의 부모노드(parent node) 이면, A의 키(key)값과 B의 키값 사이에는 대소관계가 성립한다

- 위키백과 출처

 


문제해설

최소 힙은 부모 노드가 자식 노드보다 작거나 같은 조건을 만족하는 힙을 의미한다. 

 

새로운 노드를 추가할 때는 트리의 제일 마지막에 노드를 넣은 후 부모 노드가 자식 노드보다 작아질 때까지 부모 노드와 자식 노드를 서로 교환하면 된다.

 

최솟값을 출력하고 싶을 땐 제일 앞에 있는 노드를 빼내고, 가장 마지막에 있는 노드를 최상단으로 올려 자식 노드와 비교해가며 노드를 아래로 내리면 된다.  

 


정답 코드

 

사실 이건 실제로 힙을 직접 구현 해 본거고 파이썬엔 최소 힙 자료구조가 이미 존재한다.

풀이시간도 더 적게 걸리고 최대 힙 같은 경우 숫자만 음수로 집어넣어서 사용하면 된다!

import heapq
import sys

input = sys.stdin.readline
#heapq 모듈은 파이썬의 리스트를 최소힙으로 사용할 수 있게 해줌, 새로운 자료구조를 생성하는게 아님에 주의!
MinHeap = []

c = int(input())

for _ in range(c):
	command = int(input())
    if command == 0:
    	#힙에서 최솟값을 빼고 싶으면 heapq.heappop(list)를 사용하면 됨
    	heapq.heappop(MinHeap)
    else:
    	#힙에 노드를 넣고 싶으면 heapq.heappush(list,node)를 사용하면 됨
    	heapq.heappush(MinHeap,command)

 

728x90

'개발 > 문제풀이' 카테고리의 다른 글

[카카오 2023 BLIND RECRUITMENT, Python] 이모티콘 할인행사 문제풀이  (0) 2023.03.07
[BOJ 27211, Python] 도넛 행성 풀이  (0) 2023.02.01
[BOJ 27210, Python] 신을 모시는 사당 풀이  (0) 2023.02.01
백준 1697,12851,13913 파이썬 풀이 (숨바꼭질 1, 숨바꼭질 2, 숨바꼭질 3)  (0) 2021.04.08
2월 1주차 백준 문제풀이 파이썬(듣보잡, 회의실 배정, 바이러스, 최대 힙, 집합 연결요소의 개수, 좌표압축)  (0) 2021.02.08
  • 문제해설
  • 정답 코드
'개발/문제풀이' 카테고리의 다른 글
  • [BOJ 27211, Python] 도넛 행성 풀이
  • [BOJ 27210, Python] 신을 모시는 사당 풀이
  • 백준 1697,12851,13913 파이썬 풀이 (숨바꼭질 1, 숨바꼭질 2, 숨바꼭질 3)
  • 2월 1주차 백준 문제풀이 파이썬(듣보잡, 회의실 배정, 바이러스, 최대 힙, 집합 연결요소의 개수, 좌표압축)
Junhyung-Choi
Junhyung-Choi
Junhyung-Choi
TheOldFace 개발 블로그
Junhyung-Choi
전체
오늘
어제
  • 분류 전체보기 (29)
    • 개발 (29)
      • 개발환경 설정 (4)
      • 문제풀이 (6)
      • Unity (2)
      • [시리즈] Unity 튜토리얼 (0)
      • Django (0)
      • [시리즈] DRF + React (8)
      • 이슈 해결 모음 (6)
      • [시리즈] Effective C++ (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • M1 MacBook
  • 파이썬
  • 쇼미더코드3차
  • 쇼미더코드 3차
  • ec++
  • 문제풀이
  • mediapipe
  • 개발
  • DFS&BFS
  • BOJ
  • zsh
  • django
  • #ec++
  • React
  • 원티드
  • 백준
  • 알고리즘
  • c++
  • Shell
  • Python

최근 댓글

최근 글

hELLO · Designed By 정상우.
Junhyung-Choi
백준 1927번 최소 힙 파이썬 문제풀이
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.