문제링크
간단하게 봤을 때 구현만 친다면 vector를 사용하여 최대값을 구한다음 처리해주는 식으로 구현했지만, 시간제한에 걸리게 됨.
따라서 최대값을 구해줄 때 스택이나 큐와 같이 순차적으로 데이터가 들어온 것을 순회하며
별도의 최대값 구하는 연산을 진행하는 것이 아닌 우선순위가 높은 데이터가 먼저 나가는
우선순위 큐를 사용하여 연산에 수행되는 시간을 줄여 쉽게 풀어줄 수 있음.
제출 코드
#include <bits/stdc++.h>
using namespace std;
int main()
{
int N = 0;
cin >> N;
vector<int> results;
priority_queue<int> q;
for(int i = 0; i < N; i++)
{
int x = 0;
cin >> x;
if(x == 0)
{
if(!q.empty())
{
results.push_back(q.top());
q.pop();
}
else
{
results.push_back(0);
}
}
else
{
q.push(x);
}
}
for(int i = 0; i < results.size(); i++)
{
cout << results[i] << "\n";
}
return 0;
}
'알고리즘 > 백준풀이' 카테고리의 다른 글
[백준/C++] 1931번 회의실 배정 (0) | 2024.11.13 |
---|---|
[백준/C++] 1927번 최소 힙 (0) | 2024.11.13 |
[백준/C++] 2776번 암기왕 (1) | 2024.10.26 |
[백준/C++] 1966번 프린터 큐 (1) | 2024.10.26 |
[백준/C++] 2164번 카드2 (0) | 2024.10.26 |