https://school.programmers.co.kr/learn/courses/30/lessons/42626
문제 이해
매운맛에 대한 Scoville 벡터와 표준 매운맛에 대한 K가 제공됩니다.
scvill의 모든 요소가 K보다 크거나 같도록 하려면 두 번째로 작은 요소에 2를 곱하고 가장 작은(가장 매운) 요소에 더합니다.
이것이 일어나는 횟수를 출력하시오. 모든 요소가 K를 초과하지 않으면 -1을 출력합니다.
해결 + 코드
해결하려면 우선 순위 대기열을 사용하십시오. top() 사용을 단순화하려면 작은 순서로 정렬하십시오.
priority_queue 사용
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(vector<int> scoville, int K) {
int answer = 0;
priority_queue <int,vector<int>,greater<int>> pq(scoville.begin(), scoville.end());
while(pq.size() > 1 && pq.top() < K){
int one = pq.top();
pq.pop();
int two = pq.top();
pq.pop();
int three = one + two * 2;
pq.push(three);
answer++;
}
if(pq.top() < K) answer = -1;
return answer;
}
피드백
우선순위 대기열에 대해 알아보세요. 잘 활용할 수 있을 것 같아요.
참조
암호:
우선 대기열: