본문 바로가기

온라인 코딩/힙(Heap)

[프로그래머스] 더 맵게

 

 

 

 

 

문제

 

 

 

소스코드

#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보다 크다면 큐 전부를 살펴보도록 진행하였다. 더 깔끔하게 짠 사람도 많아서 많은 부분을 반성하게 된다.

 

관련 글

 우선 순위 큐(Priority Queue)

 

 

출처 및 레퍼런스

문제 링크: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