https://school.programmers.co.kr/learn/courses/30/lessons/42626
문제가 그냥,, 이지했다
우선순위큐를 통해 오름차순 정렬시키고,
순서대로 뽑아서 가장 작은 값이 K 이상이 될 때까지 섞어주면 되는 문제다.
C++ 우선순위 큐 (priority_queue)
priority_queue<int, vector<int>, greater<int>>
: 오름차순 (낮 - 높) 정렬
priority_queue<int, vector<int>, less<int>>
: 내림차순 (높 - 낮) 정렬
priority_queue<int>
: 내림차순 정렬 (디폴트)
제한 사항에
모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우에는 -1을 return 합니다.
이 부분을 안읽어서 처음에 실패했었다.
문제를 잘 읽자!
#include <string>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
int solution(vector<int> scoville, int K) {
int answer = 0;
priority_queue<int, vector<int>, greater<int>> pq;
for(auto& sc : scoville) {
pq.push(sc);
}
while(pq.top() < K) {
if (pq.size() < 2) {
answer = -1;
break;
}
int min = pq.top();
pq.pop();
int next = pq.top();
pq.pop();
int newFood = min + next * 2;
pq.push(newFood);
answer++;
}
return answer;
}