문제
https://school.programmers.co.kr/learn/courses/30/lessons/42626
풀이
이 문제의 조건을 확인해보자.
섞은 음식 스코빌 지수 = 가장 맵지 않은 스코빌 지수 + 두 번째로 맵지 않은 스코빌 지수 * 2
이를 읽어보면 결국 제일 맵지 않은 스코빌 지수를 가장 적은 횟수로 K 스코빌을 넘기는 게 중요하다.
가장 먼저 생각난 풀이는 PriorityQueue 를 활용하여 가장 덜 매운 음식과 두 번째로 덜 매운 음식을 넣어 섞은 후, 이 값이 K를 넘기는지 판별하고 넘기지 못했다면, 다시 PriortiyQueue 에 넣는 방식을 생각했다.
다만 처음부터 K 를 만족하는 경우와, 안되는 경우를 예외로 생각해야 한다.
코드를 확인하자.
private static int solution(int[] scoville, int K) {
PriorityQueue<Integer> pq = new PriorityQueue<>();
int answer = 0;
for (int s : scoville) {
pq.add(s);
}
while (pq.size() > 1) {
int fir = pq.poll();
int sec = pq.poll();
if (fir >= K) return answer;
answer++;
pq.add(fir + sec * 2);
}
return pq.poll() >= K ? answer : -1;
}
처음부터 K 이상을 만족한 경우에는 바로 answer 을 반환한다.
그리고 PriorityQueue 의 갯수가 1개가 남은 경우, 그 값이 K 를 만족시키지 못한다면 어떻게 해도 K 를 넘지 못한다.
그 경우를 -1 로 반환하여 준다.
처음 이 문제를 읽었을 때 생각한 그대로 풀려서 금방 풀었지만 문제를 또 제대로 읽지 않고 K 이상을 초과라 하여 계속 틀린 문제 처리가 되었다.
항상 느끼는 거지만 문제 잘 읽자
'Coding Test > Programmers' 카테고리의 다른 글
LV2. 게임 맵 최단거리 (0) | 2024.02.01 |
---|---|
LV1. 완주하지 못한 선수 (0) | 2024.02.01 |