#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(vector<int> v, int k) {
int answer = 0;
priority_queue<int, vector<int>, greater<int>> q(v.begin(), v.end());
while (q.top() < k && q.size() >= 2) {
int i = q.top();
q.pop();
int j = q.top();
q.pop();
q.push(i + j * 2);
answer++;
}
return q.size() < 2 && q.top() < k ? -1 : answer;
}
간단히 priority_queue를 min_heap으로 만들어서 위 로직을 따르면 된다.
모든 음식의 스코빌 지수를 k 이상으로 만들어야 하기 때문에 최소 힙이 필요하고, Queue의 top이 k보다 작다면 모든 음식의 스코빌 지수가 k 이상이 아니기 때문에 2개를 꺼내서 섞고 다시 Queue에 넣는다.
While문을 돌면서 가장 작은 원소가 k보다 같거나 크다면 모든 음식의 스코빌 지수가 k보다 큰 것이 되기 때문에 answer을 반환한다. 하지만 Queue의 크기가 2보다 작을 땐 예외처리를 해주어야 하기 때문에 조건을 달아야 한다. 또한 답을 return할 때 Queue의 크기가 2보다 작고 Queue의 가장 작은 원소가 k보다 작은 경우에는 모든 음식의 스코빌 지수를 k이상으로 만들 수 없다는 뜻이기 때문에 -1을 return 해야한다.