더 맵게
2019, Jun 02
- https://programmers.co.kr/learn/courses/30/lessons/42626
- priority queue를 사용하여 최소값을 계속 추적하면 되는 문제입니다.
- pq를 이용하면 최소값을 \(logN\)으로 빠르게 찾을 수 있기 때문에 시간제한에도 충분히 들어올 수 있습니다.
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
priority_queue<int, vector<int>, greater<int>> pq;
int solution(vector<int> scoville, int K) {
int answer = 0;
for (int i = 0; i < scoville.size(); ++i) {
pq.push(scoville[i]);
}
while (!pq.empty()) {
int here = pq.top();
if (here >= K) {
break;
}
else {
if (pq.size() < 2) {
answer = -1;
break;
}
answer++;
int mmin1 = pq.top();
pq.pop();
int mmin2 = pq.top();
pq.pop();
pq.push(mmin1 + 2 * mmin2);
}
}
return answer;
}