vidigummy KAU/알고리즘 공부(백준!)

BOJ 11279/1927 최대힙/최소힙

vidi 2021. 1. 14. 22:10

www.acmicpc.net/problem/11279

 

11279번: 최대 힙

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

www.acmicpc.net

www.acmicpc.net/problem/1927

 

1927번: 최소 힙

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

www.acmicpc.net

하나를 풀면 다른 하나도 풀 수 있는 1+1 떨이 행사 같은 문제이다. 왜냐하면 최대힙이라는 것은 애초에 STL:queue에 들어있고, 그걸 -1* 해버리면 최소힙이 되어버린다. 정말 완벽하다. 

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

int main(){
	cin.tie(0);
	cout.tie(0);
	int N;
	cin >> N;
	priority_queue<int, vector<int>> ans;
	while (N--)
	{
		int tmp;
		cin >> tmp;
		if (tmp == 0) {
			if (ans.empty())
				cout << "0\n";
			else {
				cout << ans.top() << endl;
				ans.pop();
			}
		}
		else ans.push(tmp);
	}
	return 0;
}

최대힙

 

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

int main(){
	cin.tie(0);
	cout.tie(0);
	int N;
	cin >> N;
	priority_queue<int, vector<int>> ans;
	while (N--)
	{
		int tmp;
		cin >> tmp;
		if (tmp == 0) {
			if (ans.empty())
				cout << "0\n";
			else {
				cout << -1*ans.top() << endl;
				ans.pop();
			}
		}
		else ans.push(-1*tmp);
	}
	return 0;
}

최소 힙

'vidigummy KAU > 알고리즘 공부(백준!)' 카테고리의 다른 글

BOJ N과 M 시리즈  (0) 2021.01.16
BOJ 11286 절댓값 힙  (0) 2021.01.14
BOJ 1202 보석도둑  (0) 2021.01.14
BOJ 1780 종이의 개수  (0) 2021.01.10