-
BOJ 1927: 최소 힙알고리즘 2023. 7. 18. 13:31
#BOJ 1927: 최소 힙
1927번: 최소 힙
첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0
www.acmicpc.net
#풀이
문제를 읽어보면 항상 최솟값만 출력하고 출력한 최솟값을 배열에서 지운다.
이 것을 통해 최소 힙을 사용하면 간단하게 해결할 수 있다는 것을 알 수 있다.
힙을 사용하는 stl중에서는 priority_queue가 있다. 하지만 우선순위 큐는 최대 힙이 디폴드로 되어 있어 따로 비교함수를 만들거나 다른 방법을 사용해서 최소 힙으로 변경한 뒤에 사용해야 한다.
priority_queue<int, vector<int>, cmp> 또는 priority_queue<int, vector<int>, greater<int>> 를 사용해야 한다.
또한 sort() 함수에서 사용했던 비교함수가 아닌 클래스로 정의한 다음 operator() 로 연산자를 만들어야한다.
#코드
#include<iostream> #include<queue> #include<vector> using namespace std; class cmp { public: bool operator() (int a, int b) { if (a > b) return true ; // true b가 앞으로 감 return false; } }; priority_queue<int, vector<int>,cmp > q; int n; int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i = 0; i < n; i++) { int x; cin >> x; if (x == 0) { if (q.empty()) { cout << 0 << '\n'; } else { cout << q.top() << '\n'; q.pop(); } } else { q.push(x); } } return 0; }
'알고리즘' 카테고리의 다른 글
BOJ 2075: N번째 큰 수 (0) 2023.07.18 BOJ 1715: 카드 정렬하기 (0) 2023.07.18 BOJ 21944: 문제 추천 시스템 Version 2 (0) 2023.07.18 BOJ 23326 : 홍익 투어리스트 (0) 2023.07.14 BOJ 21939 : 문제 추천 시스템 (0) 2023.07.14