Algorithm/Programmers(c++)
[c++][프로그래머스] 더 맵게
kim-hasa
2022. 3. 3. 14:40
https://programmers.co.kr/learn/courses/30/lessons/42626
코딩테스트 연습 - 더 맵게
매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같
programmers.co.kr
덜 매운 음식 두개를 합쳐서 모든 음식을 특정 스코빌 지수 이상으로 만드는 문제입니다.
여기서는 우선순위 큐를 오름차순으로 구현했습니다.
우선순위 큐에서 앞에 두개를 제거해서 새로 만들어서 넣어주고 비교하는 방식으로 풀었습니다.
우선 순위 큐를 적극적으로 사용하고 나서 쉽게 풀리는 문제들이 많이 있는 것 같습니다.
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int solution(vector<int> scoville, int K) {
int answer = 0;
priority_queue<int , vector<int> , greater<int>> arr;
for(int i=0; i<scoville.size(); i++){
arr.push(scoville[i]);
}
while(true){
int top = arr.top();
if(top >= K){
break;
}
else if(arr.size() == 1){
answer = -1;
break;
}
arr.pop();
int top2 = arr.top();
arr.pop();
int sum = top + (top2 * 2);
arr.push(sum);
answer++;
}
return answer;
}