2020. 6. 24. 09:29ㆍ알고리즘_생각하기/프로그래머스 Level 2
문제 설명
매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다.
섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)
Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다.
Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요.
풀이
사용 언어 : C++
#include <vector>
#include <queue> //큐 선언해준다
using namespace std;
int solution(vector<int> scoville, int K)
{
int first = 0; //가장 맵지 않은 것
int second = 0; //두 번째로 맵지 않은 것
int count = 0; //섞은 횟수
priority_queue<int, vector<int>, greater<int>>temp; //오름차순으로 정렬하기
for (int i = 0; i < scoville.size(); i++) //백터에 있는 원소를 전부 큐에 넣는다
{
temp.push(scoville[i]);
}
while(temp.top() <= K && temp.size() > 1) //while문을 돌리는 조건은 모든 원소가 K이하일 때, 큐에 하나라도 원소가 있을 때
{
count++; //섞은 횟수 증가
first = temp.top(); temp.pop(); //오름차순으로 정렬했으니 맨 뒤의 것이 가장 맵지 않은 것이 된다
second = temp.top(); temp.pop(); //두 번쨰로 맵지 않은 것은 끝에서 두 번째 것
temp.push(first + (second * 2)); //섞는 공식으로 섞엉!
}
if (temp.top() < K) //K보다 작은 것이 남아있을 수 밖에 없으면 -1 반환 하랬으니 반환
{
return -1;
}
else //다 K보다 작으면 섞은 횟수를 반환
{
return count;
}
}
'알고리즘_생각하기 > 프로그래머스 Level 2' 카테고리의 다른 글
프로그래머스 - 올바른 괄호 <Level 2> (1) | 2024.01.26 |
---|---|
프로그래머스 - 이진 변환 반복하기 <Level 2> (0) | 2024.01.24 |
프로그래머스 - 짝지어 제거하기 <Level 2> (0) | 2024.01.17 |
프로그래머스 - 최댓값과 최솟값 < Level 2 > (0) | 2020.07.09 |
프로그래머스 - 탑 < Level 2 > (0) | 2020.06.25 |