반응형

 문제

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



잘려고 하다가 최대힙에서 부호만 바꾸어주면 되는거 같아서 이렇게 작성하고 잔다.

스왑하는 부분만 부호를 바꾸어주면된다.



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
32
33
34
35
36
37
38
39
40
41
import sys
input=sys.stdin.readline
pq=[]
pqlen=0#길이
 
N=int(input())
while N>0:
    N-=1
    x=int(input())
    if x>0:#push
        pq.append(x) #제일끝에 추가해준다
        pqlen += 1
        a=pqlen-1
        while a>0:#힙구조 만들기
            if pq[a]<pq[(a-1)//2]:  #부모보다 크다면 바꾸어준다 끝까지 도달하거나 바꿀필요가 없을때까지
                pq[a],pq[(a-1)//2]=pq[(a-1)//2],pq[a]
                a=(a-1)//2
            else:
                break
 
 
    elif x==0:#pop
        if pqlen==0:
            print(0)
        else:
            print(pq[0])
            pq[0]=pq[pqlen-1]
            pq.pop()
            pqlen-=1
            a=0 #루트노드부터 출발
            child=1
            while child<=pqlen-1:#힙구조 만들기 길이를 초과하지 않을때까지
                if a*2+2<=pqlen-1 and pq[a*2+1]>pq[a*2+2]:#작은자식찾기
                    child=a*2+2
 
                if pq[child]<pq[a]:#자식이 더작다면 스왑
                    pq[child],pq[a]=pq[a],pq[child]
                    a=child
                    child=a*2+1
                else:#더이상 스왑할 필요없으면 멈춤
                    break

cs



반응형

'알고리즘(python) > 자료구조' 카테고리의 다른 글

[Python]우선순위큐 백준 1655  (0) 2020.02.02
[Python]우선순위큐 백준 11286  (0) 2020.02.02
[Python]우선순위큐 백준 11279  (0) 2020.02.01
[Python]Deque 백준 5430  (0) 2020.01.18
[Python]Deque 백준 1021  (0) 2020.01.17
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기