프로그래머스 42626 - 더 맵게
생각 및 접근
- 스코빌 지수가 제일 낮은 것과 그 다음으로 낮은 것을 찾아야 하므로 처음에는 C++ STL Algorithm의 sort로 해결하려고 했으나, 정렬하고 두 개 뽑아서 하나 넣고, 정렬하고 두 개 뽑아서 하나 넣고 식의 코드는 시간 효율이 너무 떨어질 것 같았다.
- 그래서 새로 생각해낸 방식이 우선순위 큐 활용하기 (우선순위 큐에 대한 내용 링크)
- 우선순위 큐를 최소 힙으로 선언하여, 우선순위 큐에
scoville
의 값들을 다 넣고, 부모 노드 두개만 뽑아서 값을 체크하면 된다. - 답을 반환하는 시점
- 우선순위 큐의 top이 K보다 크거나 같을 때 (모든 음식의 스코빌 지수를 K 이상으로 만든 경우)
- 우선순위 큐의 top이 K보다 작고, 그 값이 우선순위 큐에 존재하는 유일한 원소일 때 (모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우)
코드
#include <bits/stdc++.h>
using namespace std;
int solution(vector<int> scoville, int K) {
int answer = 0;
priority_queue<int, vector<int>, greater<int> > pq;
for(auto s : scoville) pq.push(s);
while(-1){
int low1 = pq.top();
pq.pop();
if(low1 >= K) return answer;
if(pq.size() == 0) return -1;
int low2 = pq.top();
pq.pop();
pq.push(low1 + low2 * 2);
answer++;
}
}
채점 결과
'Coding Test > programmers' 카테고리의 다른 글
프로그래머스 42628 - 이중우선순위큐 (c++) (0) | 2020.07.31 |
---|---|
프로그래머스 42629 - 라면공장 (c++) (0) | 2020.07.31 |
프로그래머스 42842 - 카펫 (c++) (0) | 2020.07.30 |
프로그래머스 42841 - 숫자 야구 (c++) (0) | 2020.07.30 |
프로그래머스 42893 - 소수 찾기 (c++) (0) | 2020.07.30 |