-
프로그래머스 (Level 2) - 더 맵게Coding Test/Coding Test 문제 풀이 2021. 12. 28. 16:40
문제 설명
코딩테스트 연습 - 더 맵게
매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같
programmers.co.kr
풀이
주어진 모든 음식들을 조합해서 음식들의 스코빌 지수가 K 이상이 되도록 하는 조합 횟수를 구하는 문제이다.
음식을 조합하기 위한 계산식은 다음과 같다.
섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)
스코빌지수가 가장 낮은 음식을 계속해서 조합해야 하기 때문에 우선순위 큐를 사용하기로 했다.
우선순위 큐의 음식들을 조합하면서 모든 음식의 스코빌 지수가 K이상이 되도록 하는 반복 횟수를 구하는 방식으로 문제를 해결하였다.
전체 소스코드
import java.io.*; import java.util.*; public class Solution03 { public int solution(int[] scoville, int K) { int answer = 0; PriorityQueue<Integer> queue = new PriorityQueue<>(); for (int food : scoville) queue.add(food); while (!check(queue, K)) { if (queue.size() == 1 && queue.poll() < K) return -1; int food01 = queue.poll(); // 가장 맵지 않은 음식의 스코빌 지수 int food02 = queue.poll(); // 두 번째로 맵지 않은 음식의 스코빌 지수 int newFood = food01 + 2 * food02; queue.add(newFood); answer++; } return answer; } /** 주어진 모든 음식의 스코빌 지수가 K이상임을 판단하는 메서드 */ static boolean check(PriorityQueue<Integer> queue, int K) { for (int data : queue) if (data < K) return false; return true; } }
코드 간소화
import java.io.*; import java.util.*; public class Solution03 { public int solution(int[] scoville, int K) { int answer = 0; PriorityQueue<Integer> queue = new PriorityQueue<>(); for (int food : scoville) queue.add(food); while (queue.peek() < K) { if (queue.size() == 1) return -1; int food01 = queue.poll(); // 가장 맵지 않은 음식의 스코빌 지수 int food02 = queue.poll(); // 두 번째로 맵지 않은 음식의 스코빌 지수 int newFood = food01 + 2 * food02; queue.add(newFood); answer++; } return answer; } }
기존의 풀이 방식은 현재 음식들의 스코빌 지수가 K이상임을 판단하는 메서드를 따로 구현을 하고, 반복문을 통해 계속해서 검사를 하였다. 하지만, queue.peek() 메서드를 통해 가장 스코빌 지수가 낮은 음식만 검사를 함으로써, 코드를 간소화시킬 수 있었다.
또한, while 문안에 조건식 "queue.poll() < K" 코드는 이미 "!check(queue, K)" 코드로 인해 걸리지는 조건이기 때문에 없어도 되는 코드이다.
728x90'Coding Test > Coding Test 문제 풀이' 카테고리의 다른 글
프로그래머스 (Level 1) - 체육복 (0) 2022.01.04 프로그래머스 (Level 2) - 소수 찾기 (0) 2022.01.03 프로그래머스 (Level 2) - 기능개발 (0) 2021.12.28 프래그래머스 (Level 2) - 전화번호 목록 (0) 2021.12.28 프래그래머스 (Level 1) - 모의고사 (0) 2021.12.27