프로그래밍 공부
작성일
2024. 1. 11. 14:58
작성자
WDmil
728x90

문제 설명

매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들려고 한다.

 

모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을

아래와 같이 특별한 방법으로 섞어 새로운 음식을 만든다.

섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)


Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞는다.
Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때,

모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성하라.

 

제한 사항

  • scoville의 길이는 2 이상 1,000,000 이하
  • K는 0 이상 1,000,000,000 이하
  • scoville의 원소는 각각 0 이상 1,000,000 이하
  • 모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우에는 -1을 return 한다.


입출력 예

scoville K return
[1, 2, 3, 9, 10, 12] 7 2

첫 시도

#include <string>
#include <vector>
#include <set>

using namespace std;

int solution(vector<int> scoville, int K) {
    int answer = 0;
    set<int> answerSet(scoville.begin(), scoville.end());

    while ((*answerSet.begin()) < K && answerSet.size() > 1)
    {
        int first = (*answerSet.erase(answerSet.begin()));
        int second = (*answerSet.erase(answerSet.begin()));

        int defresult = first + second * 2;
        answerSet.insert(defresult);
        answer++;
    }

    if ((*answerSet.begin()) >= K)
        return answer;
    return -1;
}

실패.

 

동작사항 자체는 옳으나,

중복된 값을 무시하는 Set을 고려하지 않고 사용하여, 중복된 값이 기입될 수 있다는걸 생각하지 못했다.

 

일부 실패한 사례

 


두번째 시도

#include <string>
#include <vector>
#include <queue>

using namespace std;

int solution(vector<int> scoville, int K) {
    int answer = 0;
    priority_queue<int, vector<int>, greater<int>> minHeap(scoville.begin(), scoville.end());

    while (minHeap.top() < K && minHeap.size() > 1) {
        int first = minHeap.top(); minHeap.pop();
        int second = minHeap.top(); minHeap.pop();

        int mixedScoville = first + second * 2;
        minHeap.push(mixedScoville);
        answer++;
    }

    if (minHeap.top() >= K)
        return answer;
    return -1;
}

성공

 

우선순위 queue를 사용하여, 데이터를 역순으로 정렬.

 

역순 정렬 데이터를 set을 사용한것 과 같은 방식으로 데이터를 사용했다.

 

중복값을 무시하지 않음으로 데이터 사용이 성립하였다.

728x90

'코딩테스트 문제 풀이 > 스텍&큐' 카테고리의 다른 글

다리를 지나는 트럭  (0) 2024.02.14
프로세스  (0) 2024.02.08
올바른 괄호  (0) 2024.01.30
기능개발  (0) 2024.01.19
같은 숫자는 싫어  (0) 2024.01.11