728x90
위 문제의 핵심을 절대값을 인덱스로 가지며 기존의 값을 가지고 있어야 한다는 점입니다.
문제
코드
import sys, heapq as hq
input = sys.stdin.readline
n = int(input())
ls = []
for _ in range(n):
num = int(input())
if num == 0:
print(hq.heappop(ls)[1] if ls else 0)
else:
hq.heappush(ls, (abs(num), num))
설명
heapq 모듈을 import 합니다
절대값을 구해야 하기 때문에 튜플의 형태로 넣습니다
그렇게 되면 기존의 값 (절댓값, 실제값)의 형태로 힙에 저장되게 됩니다
그 뒤 절대 값을 기준으로 정렬된 힙에 실제 값을 print 합니다
예시
10 1 -1 0 0 0 1 1 -1 -1 2
이 입력을 처리하면서 힙의 상태 변화를 살펴보겠습니다.
- 입력 1:
- 절대값: 1, 원래 값: 1
- 힙 상태: [(1, 1)]
- 입력 -1:
- 절대값: 1, 원래 값: -1
- 힙 상태: [(1, -1), (1, 1)] (원래 값 -1이 1보다 작기 때문에 앞에 옴)
- 입력 0 (첫 번째 0):
- 힙에서 최솟값 (1, -1) 제거
- 출력: -1
- 힙 상태: [(1, 1)]
- 입력 0 (두 번째 0):
- 힙에서 최솟값 (1, 1) 제거
- 출력: 1
- 힙 상태: []
- 입력 0 (세 번째 0):
- 힙이 비어있으므로 출력: 0
- 입력 1:
- 절대값: 1, 원래 값: 1
- 힙 상태: [(1, 1)]
- 입력 1:
- 절대값: 1, 원래 값: 1
- 힙 상태: [(1, 1), (1, 1)]
- 입력 -1:
- 절대값: 1, 원래 값: -1
- 힙 상태: [(1, -1), (1, 1), (1, 1)]
- 입력 -1:
- 절대값: 1, 원래 값: -1
- 힙 상태: [(1, -1), (1, -1), (1, 1), (1, 1)]
- 입력 2:
- 절대값: 2, 원래 값: 2
- 힙 상태: [(1, -1), (1, -1), (1, 1), (1, 1), (2, 2)]
'자료구조&알고리즘 > 백준' 카테고리의 다른 글
백준 | [파이썬 Python] 11049 행렬 곱셈 순서 (0) | 2024.06.10 |
---|---|
백준 | [파이썬 Python] 11066 파일 합치기 (0) | 2024.06.10 |
백준 | [파이썬 Python] 12015 가장 긴 증가하는 부분 수열 2 (0) | 2024.06.02 |
백준 | [파이썬 Python] 10816 숫자 카드 2 (0) | 2024.05.28 |
백준 | [파이썬 Python] 13305 주유소 (0) | 2024.05.18 |