๋งค์ด ๊ฒ์ ์ข์ํ๋ Leo๋ ๋ชจ๋ ์์์ ์ค์ฝ๋น ์ง์๋ฅผ K ์ด์์ผ๋ก ๋ง๋ค๊ณ ์ถ์ต๋๋ค. ๋ชจ๋ ์์์ ์ค์ฝ๋น ์ง์๋ฅผ K ์ด์์ผ๋ก ๋ง๋ค๊ธฐ ์ํด Leo๋ ์ค์ฝ๋น ์ง์๊ฐ ๊ฐ์ฅ ๋ฎ์ ๋ ๊ฐ์ ์์์ ์๋์ ๊ฐ์ด ํน๋ณํ ๋ฐฉ๋ฒ์ผ๋ก ์์ด ์๋ก์ด ์์์ ๋ง๋ญ๋๋ค.
์์ ์์์ ์ค์ฝ๋น ์ง์ = ๊ฐ์ฅ ๋งต์ง ์์ ์์์ ์ค์ฝ๋น ์ง์ + (๋ ๋ฒ์งธ๋ก ๋งต์ง ์์ ์์์ ์ค์ฝ๋น ์ง์ * 2)
Leo๋ ๋ชจ๋ ์์์ ์ค์ฝ๋น ์ง์๊ฐ K ์ด์์ด ๋ ๋๊น์ง ๋ฐ๋ณตํ์ฌ ์์ต๋๋ค.
Leo๊ฐ ๊ฐ์ง ์์์ ์ค์ฝ๋น ์ง์๋ฅผ ๋ด์ ๋ฐฐ์ด scoville๊ณผ ์ํ๋ ์ค์ฝ๋น ์ง์ K๊ฐ ์ฃผ์ด์ง ๋, ๋ชจ๋ ์์์ ์ค์ฝ๋น ์ง์๋ฅผ K ์ด์์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ์์ด์ผ ํ๋ ์ต์ ํ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
scoville | K | return |
---|---|---|
[1, 2, 3, 9, 10, 12] | 7 | 2 |
PriorityQueue<Integer> pq = new PriorityQueue<>();
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
โ> ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ๋ก ์ฐ์ ์์ ํ ์ ์ธ ๊ฐ๋ฅimport java.util.PriorityQueue;
public class Solution {
// ํ๋ก๊ทธ๋๋จธ์ค LEVEL2 ๋ ๋งต๊ฒ
// ๋ฌธ์ URL : <https://programmers.co.kr/learn/courses/30/lessons/42626>
public int solution(int[] scoville, int K) {
// ์ฐ์ ์์๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น๋ฌธ์ ํด๊ฒฐ๊ฐ๋ฅ
PriorityQueue<Integer> pq = new PriorityQueue<>();
// ์ฐ์ ์์ํ์ ๊ฐ ์ค์
for (Integer i : scoville) {
pq.offer(i);
}
// ์ ์ผ ์์ ๋งค์ด๋ง์ด ๊ธฐ์ค๋ณด๋ค ํฌ๋ฉด 0 ๋ฐํ
if (pq.peek() >= K) {
return 0;
}
int minCnt = 0; // ์๋ ํ์
while (pq.peek() < K) {
if (pq.size() == 1) {
return -1;
}
int a = pq.poll(); // ์ ์ผ์์ ๊ฐ ๋ฐํ ๋ฐ ์ ๊ฑฐ
int b = pq.poll(); // ๋๋ฒ์งธ ๊ฐ ๋ฐํ ๋ฐ ์ ๊ฑฐ
int result = a + (b * 2);
minCnt++;
pq.offer(result); // ํด๋น๊ฐ ์ฐ์ ์์ํ์ ์ถ๊ฐ
}
return minCnt;
}
}