[99클럽 코테 스터디 25일차 TIL] 프로그래머스 더 맵게

0
post-thumbnail

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를 반환하게 했다.


![](https://velog.velcdn.com/images/hi_potato/post/3756f20e-051a-4692-8784-4f064c4b1d29/image.png)

7점 뿌듯❗ 🥰

profile
나는 말하는 감자다

0개의 댓글