리뷰
항상 가장 작은 수와, 그 다음 작은 수가 필요해서 자동으로 정렬해주는 우선순위 큐를 이용했다.
우선순위 큐에서 front()를 first로 받고, pop()후에 front()를 second로 받으면 쉽게 접근할 수 있다.
항상 2개를 꺼내니까 pop()을 2번 해줘야하는 것을 유의하자.
전부 스코빌지수가 K가 됬는지는 큐의 크기가 1이 됬을 때 검사한다.
마지막 남은 원소가 K 미만이라면 answer 는 실패다.
맞았습니다 코드
#include <bits/stdc++.h>
using namespace std;
int solution(vector<int> scoville, int K) {
int answer = 0;
bool result = true;
priority_queue<int, vector<int>, greater<int>> pq;
for(auto s : scoville){ pq.push(s); }
while(!pq.empty()){
if(pq.top() > K) break; // 더 검사하지 않아도 된다
if(pq.size() == 1 && pq.top() < K) { result = false; break; } // 실패
int first = pq.top();
pq.pop();
int second = pq.top();
pq.pop();
pq.push(first + (second * 2));
// cout << "first: " << first << " second:" << second << ' ';
answer++;
}
if(!result) answer = -1;
return answer;
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
int k = 7;
vector<int> scofille = {1, 2, 3, 9, 10, 12};
cout << solution(scofille, k);
return 0;
}
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 등굣길 c++ (0) | 2022.05.04 |
---|---|
[프로그래머스] N으로 표현 c++ DFS코드 (0) | 2022.04.13 |
[프로그래머스] 여행경로 c++ (0) | 2022.04.08 |
[프로그래머스] 단속카메라 c++ 2가지 풀이 (0) | 2022.04.06 |
[프로그래머스] 네트워크 c++ DFS (0) | 2022.04.05 |