본문 바로가기

algorithm/프로그래머스

프로그래머스_더 맵게(JAVA)

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

[문제 풀이]

우선순위 큐를 이용하여 문제를 풀었습니다.

해당 문제는 소코빌 지수를 몇번안에 만들 수 있는지를 찾는 문제 였으며, 로직은 아래와 같습니다.

  1. 배열로 주어진 스코빌 지수들을 우선순위큐에 추가해줍니다.
  2. 큐에 원소가 없을 때까지 큐를 순회합니다.
  3. 가장 앞에 있는 원소가 스코빌 지수보다 클 경우 횟수를 반환합니다.
  4. 큐에 값이 두개 미만으로 존재할 경우 -1을 반환합니다.
  5. 4, 5번의 경우가 아니면 횟수를 +1 해줍니다.

[JAVA]

import java.util.*;

class Solution {
    public int solution(int[] scoville, int K) {
        int answer = 0;
        
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        
        for(int item : scoville)
            pq.add(item);
        
        while(!pq.isEmpty()){
            int min = (int)pq.poll();
            
            if(min >= K)
                break;
            else if(pq.isEmpty()){
                answer = -1;
            }
            else{
                pq.add(min + ((int)pq.poll() * 2));
                answer++;
            }
        }
        
        return answer;
    }
}