오늘의 알고리즘
[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로 다시 넣어주면 된다.