더 맵게

더 맵게

2019, Jun 02    
  • https://programmers.co.kr/learn/courses/30/lessons/42626
  • priority queue를 사용하여 최소값을 계속 추적하면 되는 문제입니다.
  • pq를 이용하면 최소값을 \(logN\)으로 빠르게 찾을 수 있기 때문에 시간제한에도 충분히 들어올 수 있습니다.
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;

priority_queue<int, vector<int>, greater<int>> pq;

int solution(vector<int> scoville, int K) {
	int answer = 0;

	for (int i = 0; i < scoville.size(); ++i) {
		pq.push(scoville[i]);
	}
	

	while (!pq.empty()) {
		int here = pq.top();
		if (here >= K) {
			break;
		}
		else {
			if (pq.size() < 2) {
				answer = -1;
				break;
			}
			answer++;
			int mmin1 = pq.top();
			pq.pop();
			int mmin2 = pq.top();
			pq.pop();

			pq.push(mmin1 + 2 * mmin2);
		}
	}

	return answer;
}