Programmers_Heap01 - 더 맵게
프로그래머스 - 더 맵게 문제 입니다.
1. 문제
https://programmers.co.kr/learn/courses/30/parts/12077
- 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)
2. 분류 및 난이도
Programmers 문제입니다.
level 2의 문제입니다.
3. 생각한 것들(문제 접근 방법)
- 처음 두 개의 값을 빼서 계산한 다음 다시 넣는데 정렬해서 넣어야하므로 우선순위 큐를 생각했습니다.
- 예외는 두 가지 상황을 고려했습니다.
- 처음에 아예 안들어올 때
- 첫 번째 요소를 큐에서 제거했는데 다음에 빼야할 두 번째 요소가 없을 때
- 큐 맨 앞에 있는 요소가 K를 넘을 때 반복문을 벗어납니다.
4. 접근 방법을 적용한 코드
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 <algorithm>
#include<queue>
#include <iostream>
using namespace std;
int solution(vector<int> scoville, int K) {
int answer = 0;
priority_queue<int, vector<int>, greater<int>> q;
for (size_t i = 0; i < scoville.size(); ++i)
{
q.push(scoville[i]);
}
while (!q.empty() &&q.top() <= K )
{
int Nspicy = q.top();
q.pop();
if (q.empty())
{
answer = -1;
break;
}
int Nspicy2 = q.top();
q.pop();
int mix = Nspicy + (Nspicy2 * 2);
q.push(mix);
++answer;
}
return answer;
}
5. 결과
This post is licensed under CC BY 4.0 by the author.