- C++에서 priority_queue는 STL의 일부로 제공되는 데이터 구조 중 하나입니다.
- 요소들을 우선순위에 따라 정렬하여 다루는 자료 구조입니다.
- priority_queue는 힙(Heap) 자료 구조를 기반으로 작동하며, 기본적으로 내림차순(큰 값이 우선순위가 높음)으로 요소를 정렬합니다.
- 요소를 삽입할 때 우선순위에 따라 자동으로 정렬하고, 우선순위가 가장 높은 요소를 빠르게 추출할 수 있습니다.
📄문제
최대힙은 완전이진트리로 구현된 자료구조입니다. 그 구성은 부모 노드값이 왼쪽자식과 오른쪽 자식노드의 값보다 크게 트리를 구성하는 것입니다. 그렇게 하면 트리의 루트(root)노드는 입력된 값들 중 가장 큰 값이 저장되어 있습니다. 예를 들어 5 3 2 1 4 6 7순으로 입력되면 최대힙 트리는 아래와 같이 구성됩니다.
최대힙 자료를 이용하여 다음과 같은 연산을 하는 프로그램을 작성하세요.
1) 자연수가 입력되면 최대힙에 입력한다.
2) 숫자 0 이 입력되면 최대힙에서 최댓값을 꺼내어 출력한다. (출력할 자료가 없으면 -1를 출력한다.)
3) -1이 입력되면 프로그램 종료한다.
⬇️ 입력
첫 번째 줄부터 숫자가 입력된다. 입력되는 숫자는 100,000개 이하이며 각 숫자의 크기는 정수형 범위에 있다.
5 3 6 0 5 0 2 4 0 -1 |
⬆️ 출력
연산을 한 결과를 보여준다.
6 5 5 |
📝 풀이
#include <iostream>
#include <queue>
using namespace std;
int main()
{
int a;
priority_queue<int> pQ;
while (true)
{
scanf_s("%d", &a);
if (a == -1)
break;
if (a == 0)
if (pQ.empty())
printf("-1\n");
else
{
printf("%d\n", pQ.top());
pQ.pop();
}
else
{
pQ.push(a);
}
}
}
- 여러 값을 입력 한 후 0을 입력하면 지금까지 입력된 값들 중 가장 높은 값이 출력됩니다. 이것이 priority_queue의 특징입니다.
- 데이터를 삽입할 때 O(log N)의 시간복잡도로 자동으로 정렬해줍니다.
- top과 pop은 O(1)로 사용이 가능합니다.
'algorithms (C++)' 카테고리의 다른 글
[C++] 최대 수입 스케쥴(priority_queue 응용문제) (0) | 2023.10.18 |
---|---|
[C++] 최소힙(priority_queue : 우선순위 큐) (1) | 2023.10.18 |
[C++] 공주 구하기(Queue 자료구조) (1) | 2023.10.18 |
[C++] 송아지 찾기(BFS : 상태트리탐색) (0) | 2023.10.18 |
[C++] 그래프 최단거리(BFS) ⭐ (0) | 2023.10.18 |