๐ 1. ๋ฌธ์ ์ค๋ช
์ ์ถ๋ ฅ ์ ์ค๋ช
1. ์ค์ฝ๋น ์ง์๊ฐ 1์ธ ์์๊ณผ 2์ธ ์์์ ์์ผ๋ฉด ์์์ ์ค์ฝ๋น ์ง์๊ฐ ์๋์ ๊ฐ์ด ๋ฉ๋๋ค.
์๋ก์ด ์์์ ์ค์ฝ๋น ์ง์ = 1 + (2 * 2) = 5
๊ฐ์ง ์์์ ์ค์ฝ๋น ์ง์ = [5, 3, 9, 10, 12]
2. ์ค์ฝ๋น ์ง์๊ฐ 3์ธ ์์๊ณผ 5์ธ ์์์ ์์ผ๋ฉด ์์์ ์ค์ฝ๋น ์ง์๊ฐ ์๋์ ๊ฐ์ด ๋ฉ๋๋ค.
์๋ก์ด ์์์ ์ค์ฝ๋น ์ง์ = 3 + (5 * 2) = 13
๊ฐ์ง ์์์ ์ค์ฝ๋น ์ง์ = [13, 9, 10, 12]
๋ชจ๋ ์์์ ์ค์ฝ๋น ์ง์๊ฐ 7 ์ด์์ด ๋์๊ณ ์ด๋ ์์ ํ์๋ 2ํ์ ๋๋ค.
๐ก 2. ์ ๊ทผ๋ฐฉ์
ํญ์ ์ ๋ ฌ์ด ๋์ด ์์ด์ ๋ฎ์ ์์๋ถํฐ ๊บผ๋ผ ์ ์๋ ์ฐ์ ์์ ํ ์ฌ์ฉ
Priority Queue(์ฐ์ ์์ํ)
๋ฐฐ์ด์ ์ฐ์ ์์ ํ์ ๋ฃ๋๋ค
ํ ์์์ ๊ฐ์ฅ ๋ฎ์ ์ซ์๊ฐ k ์ด์์ด ๋ ๋ ๊น์ง ๊ฐ์ฅ ๋ฎ์ ์ซ์ ๋ ๊ฐ ์๊ธฐ
์ฐ์ ์์ ํ์์ poll์ ๋ ๋ฒ ํด ์ฃผ๋ฉด ๊ฐ์ฅ ๋ฎ์ ์ซ์์ ๋ ๋ฒ์งธ๋ก ๋ฎ์ ์ซ์๊ฐ ๋์จ๋ค
์์ ์์์ ์ค์ฝ๋น ์ง์ = ๊ฐ์ฅ ๋งต์ง ์์ ์์์ ์ค์ฝ๋น ์ง์ + (๋ ๋ฒ์งธ๋ก ๋งต์ง ์์ ์์์ ์ค์ฝ๋น ์ง์ * 2)
ํด๋น ์์์ ์ํํ๊ณ ๊ฒฐ๊ณผ๊ฐ์ ๋ค์ ํ์ ๋ฃ๋๋ค.
๊ฐ์ฅ ๋ฎ์ ์ซ์๋ฅผ ๋ค์ min ๋ณ์์ ๋ฃ๊ธฐ
์ด ๊ณผ์ ์ด ํ ๋ฒ ๋ฐ๋ณต๋ ๋๋ง๋ค cnt++ ํด์ค๋ค.
loop์ ์ข ๋ฃ ์กฐ๊ฑด์ ํ์ ๊ฐ์ฅ ๋ฎ์ ์ซ์๊ฐ K์ด์์ผ ๋ ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ผ์ while๋ฌธ์ min < K ๋๋ง ๋์๊ฐ๋ค.
๋, ๋ฃจํ ์์์ queue๊ฐ 2 ์ด์์ผ ๋๋ง loop์์ ๊ณ์ฐ์์ด ์ํ๋์ด์ผ ํ๋ค.
ํ์ ํฌ๊ธฐ๊ฐ 1์นธ์ด๋ฉด ๊ณ์ฐ์ด ๋ถ๊ฐํ๋ฏ๋ก -1 ๋ฆฌํดํด์ค๋ค.
โญ 3. ์ฝ๋
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
int cnt = 0;
PriorityQueue<Integer> pqueue = new PriorityQueue<>();
for (int s : scoville) {
pqueue.add(s);
}
int min = pqueue.peek();
while(min < K) {
if(pqueue.size()>=2) {
pqueue.add(pqueue.poll() + pqueue.poll() * 2);
min = pqueue.peek();
cnt++;
} else {
return -1;
}
}
return cnt;
}
}
๐๐ป 4. ๊ฐ์ ์ ํ ๋ฌธ์ (์ฐ์ ์์ํ)