알고리즘/Python

[백준] 11286 - 절대값 힙

9__bin 2023. 7. 5. 16:00

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

 

11286번: 절댓값 힙

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

www.acmicpc.net

문제 한줄 이해

-배열에 정수를 넣은 다음 꺼낼때 절대값이 작은 수가 먼저 출력되고 절대값이 같은 경우에는 그 중 작은 값을 꺼내는 절대값 힙 구현하기

생각난 풀이

1번째 방법: 기본적으로 우선순위 큐를 사용 하려했고 기본적으로 파이썬에서 제공하는 heapq는 최소힙으로 제일 작은 값부터 출력이 된다.

이때 나는 힙에 넣어줄때 +라면(x의 절대값, 2), -라면(x의 절대값,1)을 넣으려 했다. 이유는 첫번째 요소가 같다면 두번째 요소를 비교해 작은 값을 먼저 출력해주기 때문이다.

import sys
import heapq
n = int(sys.stdin.readline())
hq = []

for i in range(n):
    x = int(sys.stdin.readline())
    
    if x > 0:
        heapq.heappush(hq,(x,2))
    elif x< 0:
        heapq.heappush(hq,(abs(x),1))
    else:
        if hq:
            a,b = heapq.heappop(hq)
            # b가 1이라면 원래의 x값은 음수
            if b == 1:
                print(-a)
            # b가 2라면 원래의 x 값은 양수
            else:
                print(a)
        else:
            print(0)

 

'알고리즘 > Python' 카테고리의 다른 글

[백준] 14940 - 쉬운 최단거리  (0) 2023.07.06
[백준] 11403 - 경로 찾기  (0) 2023.07.06
[백준] 6064 - 카잉 달력  (0) 2023.07.04
[백준] 5525 - IOIOI  (0) 2023.07.03
[백준] 1389 - 케빈 베이컨의 6단계 법칙  (0) 2023.07.02