
-Code
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
// 우선 순위 큐에 스코빌 지수들 저장
PriorityQueue<Integer> pq = new PriorityQueue<>();
for (int i = 0; i < scoville.length; i++) {
pq.add(scoville[i]);
}
// 돌면서 스코빌 섞기
while(true) {
int nowScoville = pq.poll();
// 맨앞 스코빌이 K이상이면 반환
if (nowScoville >= K) return answer;
// 비어있으면 탈출
if (pq.isEmpty()) break;
// 안 비어있으면 계산
nowScoville += pq.poll() * 2;
pq.add(nowScoville);
answer++;
}
return -1;
}
}
처음에는 덱으로 풀릴 줄 알고 정렬 후 덱에 넣고 앞부터 비교했습니다. 하지만 그렇게 되면 첫 번째 원소가 두 번째 원소보다 커지면 문제가 생기기 때문에 우선순위 큐라는 자료 구조를 사용해야 한다는 것을 알고 사용했습니다. 단 비어있는 경우와 현재 스코빌이 K이상인 경우를 따로 체크를 해주는 부분도 필요해서 한번 더 틀렸었습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 2206번 벽 부수고 이동하기 (0) | 2026.01.05 |
|---|---|
| [프로그래머스/Java] 가장 큰 수 (0) | 2026.01.04 |
| [프로그래머스/Java] 무인도 여행 (0) | 2026.01.04 |
| [프로그래머스/Java] 게임 맵 최단거리 (0) | 2026.01.04 |
| [백준/Java] 24052번 알고리즘 수업 - 삽입 정렬 2 (0) | 2026.01.04 |