- 문제
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
- 풀이
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
//스코빌 지수가 가장 낮은 음식 두 개를 찾아 꺼내는 동작을 반복해야 합니다.
//여기서 우선순위 큐 라는 자료구조를 생각할 수 있었습니다.
//우선순위 큐는 다양한 기준으로 우선순위를 설정할 수 있지만, default가 수의 오름차순 정렬이기 때문에
//그대로 사용합니다.
PriorityQueue<Integer> pq = new PriorityQueue<>();
//scoville 배열의 수들을 pq에 담아줍니다.
for(int a : scoville){
pq.add(a);
}
//음식 섞기 횟수를 담아줄 count 변수입니다.
int count = 0;
//pq의 가장 앞의 값 즉 모든 음식의 최소 스코빌 지수가 K값보다 아래라면 계속 반복합니다.
while(pq.peek() < K){
//만약 음식이 하나밖에 남지 않았다면, 더 이상 음식 섞기가 불가능하므로 반복을 멈춥니다.
if(pq.size() == 1) break;
//가장 맵지 않은 음식 a, 두번째로 맵지 않은 음식 b를 꺼내줍니다.
int a = pq.poll();
int b = pq.poll();
//음식을 섞어줍니다.
pq.add(a+b*2);
//섞은 횟수를 추가시켜줍니다.
count++;
}
//음식을 섞은 후 최솟값이 K보다 작다면 answer에 -1을
//아니라면 count를 담아줍니다.
if(pq.peek()<K) answer = -1;
else answer = count;
//답을 반환합니다.
return answer;
}
}
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스] 택배상자, java (0) | 2025.02.04 |
---|---|
[프로그래머스] 주식가격, java (0) | 2025.02.03 |
[프로그래머스] 모음사전, java (0) | 2025.01.31 |
[프로그래머스] 뒤에 있는 큰 수 찾기, java (0) | 2025.01.31 |
[프로그래머스] 정수 삼각형, java (0) | 2025.01.31 |