본문 바로가기
알고리즘/BOJ

[BOJ] 11286번 절댓값 힙 / 사용언어 : 파이썬(python)

by 바른 호랑이 2021. 12. 27.
728x90
반응형

※ 문제링크

 

11286번: 절댓값 힙

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

www.acmicpc.net

해당문제는 우선순위 큐 자료구조와 heap를 통해 풀어야하는 문제였다. 파이썬에서는 해당 자료구조를 구현할 수 있게 heapq 패키지를 지원하고 있어 해당 패키지를 활용하여 풀었다. 자세한 풀이방법과 코드는 아래와 같다.

1. 입력값을 받고, 입력받은 값에 따라 pop또는 push명령을 수행한다.

2. 절댓값을 입력받아야 함으로 push명령을 수행할 때는 리스트 형태로 값을 저장한다.

+ 입력값이 많아 print나 input함수를 쓰면 시간초과가 발생할 수 있으니, 개행문자에 유의하여 sys함수를 사용하자

 

import heapq
import sys
r_list = []
N = int(input())
for i in range(N):
    order = int(input())
    if i == N - 1:
        if order == 0:
            if len(r_list) == 0:
                sys.stdout.write(f'0')
            else:
                sys.stdout.write(f'{heapq.heappop(r_list)[1]}')
        else:
            heapq.heappush(r_list, [abs(order), order])
    else:
        if order == 0:
            if len(r_list) == 0:
                sys.stdout.write(f'0\n')
            else:
                sys.stdout.write(f'{heapq.heappop(r_list)[1]}\n')
        else:
            heapq.heappush(r_list, [abs(order), order])

 

P.S 개발자가 되기위해 공부중입니다. 잘못된 부분을 댓글로 남겨주시면 학습하는데 큰 도움이 될 거 같습니다.

728x90
반응형

댓글