프로그래머스/lv2/42626. 더 맵게

SITY·2023년 10월 9일
0

Cpp_Algorithm

목록 보기
25/43

#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 해야한다.

profile
·ᴗ·

0개의 댓글