99클럽 코테 스터디 25일차 TIL
💙 JAVA 비기너
import java.util.PriorityQueue;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
PriorityQueue<Integer> food = new PriorityQueue<>();
for(int scov : scoville) {
food.add(scov);
}
while(!food.isEmpty() && food.size() >= 2 && food.peek() < K) {
int first = food.poll();
int second = food.poll();
food.add(first + (second * 2));
answer++;
}
if(food.peek() < K) return -1;
return answer;
}
}
사실 첫번째 코드는
import java.util.PriorityQueue;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
PriorityQueue<Integer> food = new PriorityQueue<>();
for(int scov : scoville) {
food.add(scov);
}
while(!food.isEmpty() && food.peek() < K) {
int first = food.poll();
int second = food.poll();
food.add(first + (second * 2));
answer++;
}
if(food.peek() < K) return -1;
return answer;
}
}
이렇게 였다.
scoville
에 있는 모든 음식의 스코빌 지수를 Heap인 food
에 넣어주면 Heap에서 자동으로 작은 수로 정렬해준다.
그럼 food
가 비어있지 않고 가장 스코빌 지수가 낮은 음식이 K
보다 낮으면
섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)
을 계산하여 food
에 다시 넣어줬다. (이 때 가장 맵지 않은 음식의 스코빌 지수와 두번째로 맵지 않은 음식의 스코빌 지수는 food
에서 빼내준다.)
그리고 제출했더니!!!!
두둥탁-❗
왜?! 어째서?!?!
AI에게 피드백 해달라고 달려갔더니
아하? 요소가 두개미만인데 무조건 두개빼려고 해서 생긴 문제였다.
생각해보니 K
보다 스코빌 지수가 높아지지 못하는 경우를 생각 안했네...
수정수정...✍️
while문에 food
의 크기가 2 이상인지 확인해주고
answer
를 반환하기 전에 food
의 스코빌 지수가 가장 낮은 음식이 K
보다 크다면 모든 음식이 K
보다 스코빌 지수가 높은 것이므로 food.peek()
와 K
를 비교하여 K
가 더 크다면 -1을 아니라면 answer
를 반환하게 했다.
7점 뿌듯❗ 🥰