Programmers42626

더 맵게

Posted by Damin on January 21, 2020

더 맵게

문제 링크

  • 가장 맵지 않은 음식 + 두 번째로 맵지 않은 음식

  • 우선 순위 큐 (greater)를 이용하자!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1.	우선 순위 큐 top에 있는 원소를 변수에 저장하고, pop 해준다.

  A.	 만약, 우선 순위 큐에 남은 것이 있다면
  
      i.	우선 순위 큐 top에 있는 원소와 아까 저장한 값으로 섞은 스코빌 지수 생성
    
      ii.	Pop을 해준 뒤에, 섞은 스코빌 지수 push
      
  B.	남은 것이 없다면 break!
  
2.	우선 순위 큐의 top에 있는 원소를 확인해서 k보다 크다면 (top에 있는 원소가 가장 작을 것이다.)

  A.	Break!
  
3.	미만이라면 아무일 x

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <string>
#include <vector>
#include <queue>
#include <functional>

using namespace std;

int solution(vector<int> s, int K) {
    int answer = 0;
    priority_queue<int, vector<int>, greater<int>> pq;
    for(int i=0;i<s.size();i++){
        pq.push(s[i]);
    }
    while(pq.size()){
        int tempX = pq.top(); // 제일 안매운 음식
        pq.pop();
        if(!pq.empty()){
            int tempY = pq.top(); // 두 번째로 안매운 음식
            pq.pop();
            int tempXY = tempX + (tempY * 2);
            answer++;
            pq.push(tempXY);
        }
        else{
            return -1;
        }
        int tempZ = pq.top();
        if(tempZ >= K){
            break;
        }
    }
    return answer;
}