728x90
반응형
https://www.acmicpc.net/problem/11286
11286번: 절댓값 힙
첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0
www.acmicpc.net
정답 code
#절대값 힙
import sys
import heapq
input = sys.stdin.readline
heap = []
n = int(input())
for i in range(n):
x = int(input())
if x == 0:
if not heap:
print(0)
else:
print(heapq.heappop(heap)[1])
else:
heapq.heappush(heap,(abs(x),x))
solution
처음엔 힙큐에 튜플형태로 넣는 방법을 생각하지 못하고 힙큐를 두개 만들으려 하였다.
절대값으로 정렬된 힙과 최솟값으로 정렬된 힙을 만들어 찾으려하였는데 두 힙을 동기화 해야되고 과정이 복잡해 다른방법을 생각하다 튜플 형태로 풀게되었다.
heappush할때 (절대값,원형) 형태로 넣으면 heap이 최소 값을 처리할때 절대값의 최소를 우선적으로 처리하고 절대값의 최소가 같으면 원형이 작은 수를 최소값으로 넣게 된다.
이를 이용해 heqppush하고 출력시 [1]번인덱스에 원형 수를 출력해주면 원하는 값을 얻게 된다.
728x90
반응형
'알고리즘 > 백준[baekjoon]' 카테고리의 다른 글
[baekjoon] 백준 11659번 : 구간 합 구하기 4 (by python 파이썬) 구간합 (0) | 2022.07.23 |
---|---|
[baekjoon] 백준 11403번 : 경로 찾기 (by python) 플로이드-워셜 (0) | 2022.07.19 |
[baekjoon] 백준 11047번 : 동전 0 (by python) 그리디 (0) | 2022.07.15 |
[baekjoon] 백준 10026번 : 적록색약 (by python) bfs dfs (0) | 2022.07.13 |
[baekjoon] 백준 9461번 : 파도반 수열 (by python) (0) | 2022.07.05 |