[프로그래머스 Lv2] 더 맵게

수민이슈·2023년 7월 3일
0

[C++] 코딩테스트

목록 보기
37/116
post-thumbnail

🖊️ 문제

https://school.programmers.co.kr/learn/courses/30/lessons/42626


🖊️ 풀이

문제가 그냥,, 이지했다
우선순위큐를 통해 오름차순 정렬시키고,
순서대로 뽑아서 가장 작은 값이 K 이상이 될 때까지 섞어주면 되는 문제다.

C++ 우선순위 큐 (priority_queue)

priority_queue<int, vector<int>, greater<int>> : 오름차순 (낮 - 높) 정렬
priority_queue<int, vector<int>, less<int>> : 내림차순 (높 - 낮) 정렬
priority_queue<int> : 내림차순 정렬 (디폴트)

다만!!!

제한 사항에
모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우에는 -1을 return 합니다.
이 부분을 안읽어서 처음에 실패했었다.
문제를 잘 읽자!

#include <string>
#include <vector>
#include <queue>
#include <iostream>

using namespace std;

int solution(vector<int> scoville, int K) {
    int answer = 0;
    priority_queue<int, vector<int>, greater<int>> pq;
    
    for(auto& sc : scoville) {
        pq.push(sc);
    }
    
    while(pq.top() < K) {
        if (pq.size() < 2) {
            answer = -1;
            break;
        }
        int min = pq.top();
        pq.pop();
        int next = pq.top();
        pq.pop();
        int newFood = min + next * 2;
        pq.push(newFood);
        answer++;
    }
    
    return answer;
}

0개의 댓글