Coding Test/Programmers / / 2024. 2. 6. 21:24

LV2. 더 맵게

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42626

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이


이 문제의 조건을 확인해보자.

섞은 음식 스코빌 지수 = 가장 맵지 않은 스코빌 지수 + 두 번째로 맵지 않은 스코빌 지수 * 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
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유