ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] 더 맵게
    알고리즘/프로그래머스 2019. 12. 12. 02:27

    문제 설명

    매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다.

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

     
    Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다.
    Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요.

    제한 사항

    scoville의 길이는 1 이상 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

    입출력 예 설명

    1. 스코빌 지수가 1인 음식과 2인 음식을 섞으면 음식의 스코빌 지수가 아래와 같이 됩니다.
    새로운 음식의 스코빌 지수 = 1 + (2 * 2) = 5
    가진 음식의 스코빌 지수 = [5, 3, 9, 10, 12]

    2. 스코빌 지수가 3인 음식과 5인 음식을 섞으면 음식의 스코빌 지수가 아래와 같이 됩니다.
    새로운 음식의 스코빌 지수 = 3 + (5 * 2) = 13
    가진 음식의 스코빌 지수 = [13, 9, 10, 12]

    모든 음식의 스코빌 지수가 7 이상이 되었고 이때 섞은 횟수는 2회입니다.

     

    문제 링크: https://programmers.co.kr/learn/courses/30/lessons/42626


    우선 순위 큐를 이용하면 쉽게 풀 수 있다. 우선 순위 큐는 디폴트가 내림차순이다. 이 문제에서는 오름차순으로 바꿔야 한다. 가장 작은 수와 그다음으로 작은 수를 계산한 뒤 push를 한다. 가장 앞에 있는 값이 K보다 크면 횟수를 리턴하면 된다. 주의할 점은 큐의 사이즈가 1인 상태에서 pop을 했는데 K보다 값일 때다. 해당 처리를 하지 않으면 signal: aborted (core dumped) 오류가 난다.

    #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>> pq;
    	for (int i = 0; i < scoville.size(); ++i)
    		pq.push(scoville[i]);    
        int sum = 0, a = 0, b = 0;
       while (!pq.empty())
    	{
    		a = pq.top();
    		pq.pop();
    		if (a >= K)
    			return answer;
            else if(pq.size() == 0)
                return -1;
    		b = pq.top();
    		pq.pop();
    		sum = a + (b * 2);
    		pq.push(sum);
    		++answer;
    	}
        return -1;
    }
    

    '알고리즘 > 프로그래머스' 카테고리의 다른 글

    [프로그래머스] K번째 수  (0) 2020.02.05
    [프로그래머스] 멀쩡한 사각형  (0) 2020.02.04
    [프로그래머스] 탑  (0) 2019.12.02
    [프로그래머스] 베스트 앨범  (0) 2019.12.02
    [프로그래머스] 위장  (0) 2019.12.01

    댓글

Designed by Tistory.