티스토리 뷰

728x90

문제

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

 

코딩테스트 연습 - 더 맵게

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

programmers.co.kr

 

풀이 및 소스코드

import java.util.PriorityQueue;
class Solution {
    public int solution(int[] scoville, int K) {
      int answer = 0;
        PriorityQueue<Integer> s = new PriorityQueue<>();
        int n = scoville.length;
        
       for(int i=0;i<n;i++) {
        	s.add(scoville[i]);
        }
        //우선순위 큐에 담기
        
        if(s.peek()>=K) return 0;
        //peek - > 제일 작은 값이 이미 K 이상이라면 0 리턴
        
        boolean c = false;
        //스코빌 지수를 넘겼는지 체크하는 변수
        
        while(true) {
        	int n1 = s.poll();
        	int n2 = s.poll();
        	int k = n1+n2*2;
        	//스코빌지수 계산 부분
        	s.add(k);
        	//계산 된 값을 큐에 집어넣는다.
        	answer ++;
        	//1회 실행했으니 1 카운트
        	if(s.peek()>=K) {
        		//만약 제일 작은 값이 K를 넘는다면 c = true 후 반복문 종료
        		c = true;
        		break;
        	}
        	if(s.size()==1) {
        		//음식이 하나밖에 안남았다면, 지수 확인하기
        		c = s.peek()>=K ? true:false;
        		break;
        	}
        }
        answer = c == true ? answer:-1;
        return answer;
    }
}
반응형