ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Programmers] 더 맵게
    Algorithm/Programmers 2020. 5. 31. 18:33

    [Level 2] 더 맵게

    https://programmers.co.kr/learn/courses/30/lessons/42626#

    • 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다.
    • 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + ( 두 번째로 맵지 않은 음식의 스코빌 지수 * 2)
    • Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 떄, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수 작성해주세요.

     

     

    Solution

    • 우선순위 큐로 간단하게 풀 수 있었음
    • 모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우에 -1를 return 할 수 있도록 while 문에서 pq.size() >= 2인지 체크함 

     

     

    소스코드

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    import java.util.*;
     
    class Solution {
        static int answer = 0;
        static PriorityQueue<Integer> pq;
        public int solution(int[] scoville, int K) {
            pq = new PriorityQueue<>();
            for(int i : scoville){
                pq.offer(i);
            }
            int lowest1, lowest2, mixed;
            while(pq.peek() < K){
                if(pq.size() < 2){
                    answer = -1;
                    break;
                }
                lowest1 = pq.poll();
                lowest2 = pq.poll();
                mixed = lowest1 + (2 * lowest2);  
                pq.offer(mixed);
                answer++;
            }
            System.out.println(answer);
            return answer;
        }
    }
    cs

     

    'Algorithm > Programmers' 카테고리의 다른 글

    [Programmers] 멀쩡한 사각형  (0) 2020.06.01
    [Programmers] 가장 큰 수  (0) 2020.05.31
    [Programmers] 쇠막대기  (0) 2020.05.31
    [Programmers] 다리를 건너는 트럭  (0) 2020.05.30
    [Programmers] 스킬트리  (0) 2020.05.30

    댓글

Designed by Tistory.