문제
소스코드
#include <string>
#include <vector>
#include<iostream>
#include<queue>
using namespace std;
using my_queue = priority_queue<int, vector<int>, greater<int>>;
bool CheckScoville(my_queue queue, int K);
int solution(vector<int> scoville, int K) {
int index{ 1 };
int low_food{ 0 }, low_food2{ 0 };
my_queue queue;
for (auto i : scoville)
queue.emplace(i);
while (!queue.empty()) {
low_food = queue.top();
queue.pop();
if (!queue.empty()) {
low_food2 = queue.top();
queue.pop();
}
else
return -1;
queue.emplace(low_food + low_food2 * 2);
if (K <= low_food + low_food2 * 2) {
if (CheckScoville(queue, K) == true) {
return index;
}
}
++index;
}
return -1;
}
bool CheckScoville(my_queue queue, int K) {
while (!queue.empty()) {
auto value = queue.top();
queue.pop();
if (value < K) {
return false;
}
}
return true;
}
후기
우선순위 큐 라이브러리를 사용해서 문제를 해결하였다. 값을 체크한다고 우선순위 큐를 계속 도는 것이 성능 부분에서 시간 초과가 발생했는데 첫 값이 K보다 크다면 큐 전부를 살펴보도록 진행하였다. 더 깔끔하게 짠 사람도 많아서 많은 부분을 반성하게 된다.
관련 글
출처 및 레퍼런스
문제 링크:https://programmers.co.kr/learn/courses/30/lessons/42626
'온라인 코딩 > 힙(Heap)' 카테고리의 다른 글
[백준] 1427번 소트인사이드 (0) | 2020.06.15 |
---|---|
[백준] 11286번 절대값 힙 (0) | 2020.06.11 |
[백준] 1927번 최소 힙 (0) | 2020.03.13 |
[백준] 11279번 최대 힙 (0) | 2020.03.09 |