코딩테스트/문제

[백준] 1927번 최소 힙

스키(ski) 2023. 7. 3. 19:16
문제 내용

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

 

1927번: 최소 힙

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

www.acmicpc.net

풀이 과정

1,최초에는 deque를 이용해서 문제를 풀려고 하였지만 시간초과가 발생함.

2.이후 PriorityQueue(우선순위 큐)를 사용하여 문제를 풀어 제한시간 내로 풀이를 함.

풀이중 문제점

1.시간 초과 발생

2.PriorityQueue의 사용법 미숙

문제점 해결 과정

1.최초 풀이에서는 min()과 remove()를 사용해서 문제풀이를 진행하였음.

하지만 min()과 remove() 둘다 시간복잡도가 O(n)이어서 시간초과가 발생함.

이를 해결하기 위해 사전에 정렬을 시켜주는 PriorityQueue를 사용하기로함.

 

2. PriorityQueue에 대해 학습을 진행한후 풀이 진행.

=> 차후  PriorityQueue관련 포스트 작성으로 학습 예정

해결 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sys
from queue import PriorityQueue
 
sys_input=sys.stdin.readline
 
q=PriorityQueue() #정렬을 위한 PriorityQueue
n=int(sys_input().rstrip())
 
for _ in range(n):
    a=int(sys_input().rstrip())
 
    if a==0:
        if q.qsize()==0:
            print(0)
        else:
            print(q.get())
    else:
        q.put(a)
 
cs
주요 개념 
  • 우선순위 큐(Priority Queue)
  • 정렬(sort)

 

'코딩테스트 > 문제' 카테고리의 다른 글

[백준] 10026번 적록색약  (0) 2023.07.03
[백준] 11279번 최대 힙  (0) 2023.07.03
[백준] 11659번 구간 합 구하기 4  (0) 2023.07.03
[백준] 1764번 듣보잡  (0) 2023.07.03
[백준] 1541번 잃어버린 괄호  (0) 2023.07.03