더 맵게

Seongjin Jo·2023년 7월 21일
0

프로그래머스 LV2

목록 보기
22/28

문제

풀이

import java.util.*;
class Solution {
    public int solution(int[] scoville, int k) {
        int answer = 0;
        // 1 2 3 9 10 12
        // 1 + (2*2) = 5
        
        // 5 3 9 10 12 -> 계속 정렬을 해주자 -> pq로 하면 안해도됨
        // 3 + (5*2) = 13
        
        // 9 10 12 13
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        for(int i=0; i<scoville.length; i++) pq.offer(scoville[i]);
                
        while(pq.peek()<k){
            //계속 돌리다가 하나남아서 k를 못넘기는 경우 -> -1출력
            if(pq.size()==1){
                return answer=-1;    
            }
            else {
                int socv = pq.poll() + (pq.poll() * 2);
                pq.offer(socv);
                answer++;
            }
        }

        return answer;
    }
}

요즘은 문제만 이해하면 바로바로 로직을 짜는 듯하다. 이제는 효율성을 생각할때.

ArrayLsit<>로 문제를 풀었는데 효율이 안좋아서 , PriorityQueue로 해결.

이 문제에서 만약에 k이상의 수를 만들수없을 때 -1리턴하는 경우를 조심해줘야한다.
문제를 좀 똑바로 읽자. 엄청 금방 풀 수 있는 문제인데 조심하자.

1개의 댓글

comment-user-thumbnail
2023년 7월 21일

정말 유익한 글이었습니다.

답글 달기