1. 문제
코딩테스트 연습 - 더 맵게
매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같��
programmers.co.kr
2. 소스코드
- 가장 안 매운 음식 2개를 섞어서 맵게 만든 뒤, 매운 정도가 K를 넘을 때의 최소횟수를 반환. 불가능 하면 -1
- 매번 정렬을 해서 답을 구할 수 도 있지만, 그러면 시간복잡도 때문에 PASS할 수 없다.
- 따라서, 힙을 사용해야한다.
- 대표적으로 우선순위 큐가 있다.
- 우선 순위큐에 비교함수를 바꿔 낮은 수가 가장 앞으로 오게 할 수 있지만, 그냥 -1을 곱해서 사용해도 된다.
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(vector<int> scoville, int K) {
int answer = 0;
int len = scoville.size();
priority_queue<int> pq;
for(int i = 0 ; i < len; ++i){
pq.push(-scoville[i]);
}
int time = 0;
while(true){
int cur = -pq.top(); pq.pop();
if(cur < K){
if(!pq.empty()){
int next = -pq.top(); pq.pop();
pq.push(-(cur + next * 2));
time++;
}
else return -1;
}
else return time;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[ 프로그래머스 / 투포인트 ] 숫자의 표현 (0) | 2020.06.30 |
---|---|
[ 프로그래머스 / DP ] 땅따먹기 (0) | 2020.06.30 |
[ 프로그래머스 / BFS ] 카카오 프렌즈 컬러링 북 (0) | 2020.06.30 |
[ 프로그래머스 / map ] 전화번호 목록 (0) | 2020.06.30 |
[ 프로그래머스 / sort ] H-Index (0) | 2020.06.29 |