티스토리 뷰

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

 

11279번: 최대 힙

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

www.acmicpc.net


1. 접근 방식

  • 문제 자체가 최대 힙을 이야기하고 있다.

 

  • heapq로 최대 힙을 구현하는 방법은 2가지가 있는데, 내가 작성한 방법이 속도가 더 빠르다.
# 1
heappush(heap, (-n, n))
heappop(heap)[1]

# 2
heappush(heap, -n)
-heappop(heap)

처음에는 최대 힙을 만들기 위해 1번처럼 코드를 작성했더니, 실행 시간이 180ms가 걸렸다. 그러나 2번째 방법으로 실행해보니, 실행 시간이 128ms로 줄었다. 앞으론 최대 힙을 구현할 때 2번 방법을 사용해야겠다.

 

 

 

 

2. 정답 코드

from heapq import heappush, heappop
import sys
input = sys.stdin.readline

heap = []

count = int(input())
for _ in range(count) :
    n = int(input())

    if not n :
        print(-heappop(heap) if heap else 0)
        continue

    heappush(heap, -n)

부스트캠프를 진행하면서 최대한 코드를 깔끔하게 작성하도록 노력하고 있다.

따라서 else문이 생기면 불필요한 탭이 추가되기 때문에 if문에서 continue를 사용함으로써 else문을 제거했고, 어찌보면 불필요한 count = int(input()) 변수를 따로 생성함으로써 반복문 실행 횟수를 나타내었다.

728x90