www.acmicpc.net/problem/1927

 

1927번: 최소 힙

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

www.acmicpc.net

#include <iostream>
#include <queue>
using namespace std;

int main(void)
{
    cin.tie(0);
    cout.tie(0);
    ios_base::sync_with_stdio(0);
    
    int n;
    cin >> n;
    priority_queue<int, vector<int>, greater<int>> pq;
    for(int i = 0 , data ; i < n ; i++)
    {
        cin >> data;
        if(data == 0)
        {
            if(pq.empty()) cout << 0 << '\n';
            else
            {
                cout << pq.top() << '\n';
                pq.pop();
            }
        }
        else
        {
            pq.push(data);
        }
    }
}

 

[Approach]

1. 우선순위 큐를 사용하여 풀려고 했는데 시간초과가 났다. stl 사용했는데도 이러는거면 자료구조 사용하는게 아닌가?

2. 알고리즘의 min_element 를 사용하여 풀어보기 -> 아무래도 트리 구조로 만드는게 맞는 거 같긴 한데..

     -> cin.tie 와 ios_base::sync_with_stdio 가 10만개정도면 괜찮을 줄 알았는데 차이가 꽤 많이 나는 것 같다. 꼭 쓸 것

 

[Point]

1. 우선순위 큐 에 대해서 알고 있으면 쉽게 풀린다.

2. 기본이 내림차순 less<T>, 오름차순은 greater<T>

 

'PS > BOJ' 카테고리의 다른 글

[백준] 2667.cpp : 단지번호붙이기  (0) 2020.07.07
[백준] 1992.cpp : 쿼드트리  (0) 2020.07.07
[백준] 1389.cpp : 케빈 베이컨의 6단계 법칙  (0) 2020.07.06
[백준] 1697.cpp : 숨바꼭질  (0) 2020.07.06
[백준] 1074.cpp : Z  (0) 2020.07.04

+ Recent posts