오늘의 알고리즘

[C++]힙(Heap) 더 맵게(프로그래머스 2레벨)

하늘하늘 . 2022. 1. 30. 23:00

 

 
#include <string>
#include <vector>
#include <queue>
 
using namespace std;
 
int solution(vector<int> scoville, int K) 
{
    int answer = 0;
    int iSize = scoville.size();
    int iFirst = 0;
    int iSecond = 0;
    int iAnswer = 0;
    priority_queue<int, vector<int>, greater<int>> pri_que;
 
    for (int i = 0; i < iSize; ++i)
        pri_que.push(scoville[i]);
 
    if (pri_que.top() > K)
        return 0;
 
    while (pri_que.size() != 1 && pri_que.top() < K) 
    {
        iFIrst = pri_que.top();
        pri_que.pop();
        iSecond = pri_que.top();
        pri_que.pop();
        iAnswer = iFIrst + iSecond * 2;
        pri_que.push(iAnswer);
        ++answer;
    }
 
    if (pri_que.size() == 1 && pri_que.top() < K)
        answer = -1;
 
    return answer;
}

전부 다 했는데 효율성 문제가 있길래 이게 뭐지이... 싶었다

찾아보니  priority_queue 우선순위큐라는 게 있다.

안에서 스스로 제일 큰 값을 제일 위로 놓는 큐인데

greater<int>를 사용하면 반대로 뒤집을 수 있다.

그렇기 때문에 pop으로 두개를 뽑고 push로 다시 넣어주면 된다.