• Home
  • About
    • JOOS photo

      JOOS

      Joos's blog

    • Learn More
    • Email
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

[백준] 11279번 : 최대 힙 with python3

11 Sep 2018

Reading time ~1 minute

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

import sys

n = int(sys.stdin.readline())
heap = [0]*(2^31)
hn = 0

def push(x):
  global hn
  hn += 1
  heap[hn] = x
  i = hn
  while i :
    if i == 1:
    # 1이 아닐 때만 돌게 하기
    # 왜냐면... 1일때 돌면 0이랑 바꾼다.
        break
    if heap[i//2] < heap[i]:
        heap[i//2], heap[i] = heap[i], heap[i//2]
    else:
        break
    i //= 2

def pop():
  global hn
  ans = heap[1]
  # 나갈 값 저장해놓고
  heap[1] = heap[hn]
  # 제일 위에 가장 마지막 값을 넣는다.
  heap[hn] = 0
  # 가장 마지막 값은 초기화하고
  hn -=1
  # 줄었기 때문에 -1한다.
  i = 1
  while i:
    if i*2 > hn :
      break

    if heap[i] > heap[i*2] and heap[i] > heap[i*2+1]:
      break
    elif heap[i*2] > heap[i*2+1]:
      heap[i], heap[i*2] = heap[i*2], heap[i]
      i = i*2
    else:
      heap[i], heap[i*2+1] = heap[i*2+1], heap[i]
      i = i*2+1
  return ans

while n:
    n -= 1
    k = int(sys.stdin.readline())
    if k >0:
      push(k)
    else:
      if hn == 0:
        print(0)
      else:
        print(pop())


algorithm백준 Share Tweet +1