Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- kotlin in action 정리
- 고급매핑
- 스프링 핵심 원리
- Kotlin in action 5장
- 스프링 컨테이너와 스프링 빈
- 백준 20055 컨베이어 벨트 위의 로봇
- Kotlin in action 6장
- 백준 13460 Python
- 7장 고급매핑
- KotlinInAction
- 코틀린인액션
- 자바 ORM 표준 JPA 프로그래밍 7장
- Kotlin In Action
- 20055
- 20055 컨베이어 벨트 위의 로봇
- Python
- 스프링 핵심 원리 이해
- 코틸린인액션
- 컨베이어 벨트 위의 로봇 Python
- Kotlin
- 스프링 핵심 원리 - 기본편
- 백준
- 싱글톤 컨테이너
- Kotlin in action 3장
- spring
- 기능개발 python
- Kotlin in action 10장
- 객체 지향 설계와 스프링
- 코틀린
- 13460 구슬탈출 2
Archives
- Today
- Total
기록하는 습관
[백준] 11279 최대 힙 본문
문제
코드
첫 번째 코드 (시간 초과)
아래 코드는 시간 초과가 나는 코드이다. 이유는 input()을 사용했기 때문이다.
시간초과가 나지 않으려면 sys.stdin.readline()을 사용해야 한다고 한다.
from heapq import heappop, heappush
N = int(input())
heap = []
for _ in range(N):
num = int(input())
if num == 0:
if len(heap) == 0:
print(0)
else:
print(heappop(heap)[1])
else:
heappush(heap, (-num, num))
두 번째 코드
from heapq import heappop, heappush
import sys
N = int(sys.stdin.readline())
heap = []
for _ in range(N):
num = int(sys.stdin.readline())
if num == 0:
if len(heap) == 0:
print(0)
else:
print(heappop(heap)[1])
else:
heappush(heap, (-num, num))
sys.stdin.readline()으로 바꿨더니 바로 정답이 되었다.
개념
힙
완전 이진 트리의 일종. 중복 값을 허용한다.
- 최소 힙: 부모 노드의 키값이 자식 노드의 키값보다 항상 작은 힙
- 최대 힙: 부모 노드의 키값이 자식 노드의 키값보다 항상 큰 힙
파이썬 힙 자료구조
- heapq.heappush(heap, item) : item을 heap에 추가
- heapq.heappop(heap) : heap에서 가장 작은 원소를 pop & 리턴. 비어 있는 경우 IndexError가 호출됨.
- heapq.heapify(x) : 리스트 x를 즉각적으로 heap으로 변환함 (in linear time, O(N) )
최대 힙
파이썬의 heapq 모듈은 기본적으로 최소 힙으로 구현되어 있다. (-item, item)의 튜플 형태로 넣어주면 최대 힙 구현이 가능하다.
heapq.heappush(max_heap, (-item, item))
heap = [1,2,3,4,5]
max_heap = []
for item in heap:
heapq.heappush(max_heap, (-item, item))
print(max_heap)
실제 값은 인덱스 1에 저장되어 있으므로 heapq.heappop(max_heap)[1] 을 이용하면 된다.
'알고리즘 > [문제풀이] 백준' 카테고리의 다른 글
[백준] 9934 완전 이진 트리 (0) | 2021.05.30 |
---|---|
[백준] 14425 문자열 집합 (0) | 2021.05.23 |
[백준] 2504 괄호의 값 (0) | 2021.05.13 |
[백준] 2346 풍선 터뜨리기 (0) | 2021.05.11 |
[삼성sw역량테스트 - 기출] 구슬 탈출2 (0) | 2020.10.11 |
Comments