728x90
// ๊ธฐ๋ณธ์ ์ผ๋ก ๋ง๋ค์ด์ง๋ ํ๊ฐ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ด ๋๋ค.
Priority_queue <int> pq;
// ์ค๋ฆ์ฐจ์์ผ๋ก ๋ฒกํฐ๋ฅผ ์ ๋ ฌํ ๋
Priority_queue<int, vector<int>, greater<int>> pq;
// ์ฐ์ ์์ ํ์ ์์ ์ฝ์
pq.push(์์);
// ์ฐ์ ์์์ ๊ฐ์ฅ ์์ ์์ ํ์ธ
pq.top();
// ์ฐ์ ์์์ ๊ฐ์ฅ ์์ ์์ ์ ๊ฑฐ
pq.pop();
// ํฌ๊ธฐ ํ์ธ ๋ฐ ๋น์ด์๋์ง ์ ๋ฌด
pq.size();
pq.empty();
์ฐ์ ์์ ํ๋ฅผ ์ฐ์ง ์๊ณ ๋ ์ ๋ต์ฒ๋ฆฌ๊ฐ ๋์ง ์๋ ๋ฌธ์ ์๋ค. ๊ธฐ์กด์๋ sort๋ฅผ ์ด์ฉํด์ while ๋ฌธ ์์์ ๊ณ์์ ์ผ๋ก ์ ๋ ฌ์ ์์ผ์คฌ๋๋ฐ ์ด๋ ํจ์จ์ฑ ์ธก๋ฉด์์ ์ข์ง ์์์ ๋ฐฐ์ธ ์ ์์๋ค. priority_queue๋ฅผ ์ ์ธํ๋ฉด ์ค๋ฆ์ฐจ์์ผ๋ก ์๋ ์ ๋ ฌ๋๊ณ ์ด๋ฅผ ์ด์ฉํด topํ์ธpop ์ ๊ฑฐ push ์ถ๊ฐ๋ฅผ ํ๋ค๋ฉด ๋์ฑ์ด ํจ์จ์ ์ธ ์ฝ๋๊ฐ ๋ ๊ฒ์ด๋ค.
#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>> p_queue (scoville.begin(), scoville.end());
while(p_queue.size() > 1 && p_queue.top() < K) {
int first = p_queue.top();
p_queue.pop();
int second = p_queue.top();
p_queue.pop();
int new_sco = first + second * 2;
p_queue.push(new_sco);
answer++;
}
if(p_queue.top() < K) return -1;
return answer;
}
์ด๋ ๋ด๊ฐ ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํ์ง ์์์ ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ํต๊ณผํ ์ฝ๋์ด๋ค
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int solution(vector<int> scoville, int K) {
int answer = 0;
int new_sco = 0;
while(true) {
int count = 0;
for(int i = 0 ; i < scoville.size() ; i++) {
if(scoville[i] >= K) count++;
}
if(count == scoville.size()) break;
sort(scoville.begin(), scoville.end());
new_sco = scoville[0] + scoville[1] * 2;
scoville.erase(scoville.begin());
scoville[0] = new_sco;
answer++;
}
return answer;
}