https://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 N;
priority_queue<int, vector<int>, greater<int>> pq;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> N;
for (int i = 0; i < N; i++) {
int a;
cin >> a;
if (a == 0) {
if (pq.empty()) {
cout << 0 << "\n";
}
else {
cout << pq.top() << "\n";
pq.pop();
}
}
else {
pq.push(a);
}
}
return 0;
}
문제풀이
이 문제는 물론 다른 방법이 존재하지만, c++로 문제를 푸는 사람들은 우선순위 큐 STL을 사용하면 좋은 문제이다.
우선순위 큐인 priority_queue는 일반적인 queue와는 다르게 선입 선출 형태가 아닌 지정된 값을 통해 queue 내부의 우선순위를 정리 할 수 있다.
우선순위 큐는
priority_queue<자료형, 구현체, 비교연산자> pq;
다음과 같이 정의 된다.
나는 자료형엔 int 구현체에는 queue를 사용해주었는데 비교연산자에서 greater<int>를 작성해주었다. greater<자료형>은 기본 비교연산자이며 가장 작은 값부터 나열을 시켜준다.(큰값부터 나열은 less<자료형> 활용해주기.)
이 STL을 사용하여 코드를 작성하면 아주 간단하게 문제를 해결할 수있다. STL을 잘 이해하고 활용하는 방법도 많이 시도해보도록 하자.
'Algorithm > Koala' 카테고리의 다른 글
[백준/c++]: 2343번 기타레슨 (0) | 2022.08.13 |
---|---|
[백준/C++]: 6603번 로또 - backtracking (0) | 2022.07.24 |