본문 바로가기

c++/프로그래머스

프로그래머스 : 더 맵게 c++

programmers.co.kr/learn/courses/30/lessons/42626

 

코딩테스트 연습 - 더 맵게

매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같

programmers.co.kr

풀이

1. 우선순위 큐를 쓰면 굉장히 쉽게 쓰지만 이게 안떠올랐다면 굉장히 고생한다

2. 기본 while문이지만 조건이 조금 특이함

 -> 두개를 뽑아서 써야되므로 size가 2 이상일때만!

 -> 젤 작은거도 K를 넘는다면 스톱

 

 

#include <string>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;

int solution(vector<int> scoville, int K) {
    int answer = 0;
    priority_queue<int, vector<int>, greater<int> > q;
    for(int i=0;i<scoville.size();i++)
        q.push(scoville[i]);
    
    while(q.size()>1 && q.top()<K)// 젤 작은 것도 K를 넘거나, 다섞고 한개만 남았을때
    {
        int data_1 = q.top();
        q.pop();
        int data_2 = q.top();
        q.pop();
        
        int new_food = data_1 + data_2*2;
        answer++;
        q.push(new_food);
    }
    if(q.top()<K)
        answer =-1;
    
    return answer;
}