[PS] 99ν΄λ½ μ½ν μ€ν°λ 9μΌμ°¨ TIL (λ 맡κ²)
νκ·Έ: 99ν΄λ½, PS, TIL, μ½λ©ν μ€νΈμ€λΉ, νν΄99, ν(Heap)
μΉ΄ν κ³ λ¦¬: PS
λ¬Έμ
νμ΄
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Solution {
public int solution(int[] scoville, int K) {
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
for (int j : scoville) {
minHeap.add(j);
}
return getInteger(minHeap, K);
}
private Integer getInteger(PriorityQueue<Integer> minHeap, int K) {
int count = 0;
while (minHeap.peek() < K) {
// 1
if (minHeap.size() <= 1) {
count = -1;
break;
}
Integer firstMin = minHeap.poll();
Integer secondMin = minHeap.poll();
int newScoville = firstMin + (secondMin * 2);
// 2
minHeap.add(newScoville);
count++;
}
return count;
}
}
λ¬Έμ μμ μμ μμλ₯Ό κ³μν΄μ λ½μλ΄ κ³μ°νλ μ‘°κ±΄μ΄ μκΈ°λλ¬Έμ μ°μ μμ ν(Heap) μ μ¬μ©νκΈ°μ μ’μ 보μΈλ€.
μ΄κΈ° μ
λ ₯ λ°°μ΄μ λͺ¨λ Heap μ λ£μΌλ©΄ μ΄ν poll()
λ‘ κΊΌλΌλλ§λ€ μ΅μκ°μ΄ κΊΌλ΄μ§κΈ° λλ¬Έμ νΈλ¦¬νλ€.
(λ§μ½ μ΅μνμ΄ μλλΌ μ΅λνμ΄ νμνλ€λ©΄ new PriorityQueue<>(Comparator.reverseOrder())
μ΄λ° μμΌλ‘ Comparator
νμ
μ μ λ ¬ 쑰건μ λλ²μ§Έ μΈμλ‘ λ£μ΄μ£Όλ©΄ λλ€.)
λ¨Όμ μ€μ½λΉ μ§μλ₯Ό μ¬κ³μ° ν΄μ λ€μ νμΌλ‘ κ³μν΄μ λ£μ΄μ£Όλ μμ
μ΄ νμνλ€. 2λ² μ£Όμμμ κ·Έ μν μ νκ³ μλ€.
κ·Έ ν μμ
νμλ₯Ό 1 μ¦κ°μμΌ μ€ λ€ λ€μ while λ¬Έ 쑰건μ νμΈνκ² λλ€. μ΅μνμμ minHeap.peek()
μ νμ μ΅μκ°μ λ°ννκΈ° λλ¬Έμ
λ¬Έμ μμ μꡬνλ λͺ¨λ νλͺ©μ΄ K λ³΄λ€ μ»€μΌ λλ€
λ κ²μ μ΅μκ°μ΄ K λ³΄λ€ ν¬λ€λ©΄ λλ¨Έμ§ νλͺ©μ λ³Ό νμ μκ²λλ€.
λ¨μ§ νμμ κΊΌλΈ κ·Έ κ°λ§ κ°μ§κ³ 쑰건μ λ§λ€ μ μμ΄ μ½λκ° κ°κ²°ν΄ μ§λ€.
λ§μ½ μ°μ μμ νκ° μλ ArrayList λ λ°°μ΄λ‘ νκ²λλ©΄ μ λ ¬ νλ μμ μ μΆκ°λ‘ ν΄μΌλλ€.
while λ¬Έμ μΆ©λΆν λκ³ λλ©΄ νμ νλͺ©μ΄ κ³μ μ€μ΄λ€μ΄ κ²°κ΅ μ κ³μ°μμ μνν λ§νΌμ νλͺ©λ λ¨μ§ μκ² λ κ²μ΄λ€. κ·Έ μ‘°κ±΄μ΄ 1λ² μ£Όμμ ν΄λΉνλ€. νμ νλͺ©μ΄ 1κ° μ΄νλ‘ λ¨μ΄μ§κ² λλ©΄ λμ΄μ newScoville κ°μ λ§λ€ μ μκΈ° λλ¬Έμ λ¬Έμ μμ μꡬνλ -1 μ 리ν΄ν΄μ€μΌ νλ€.
λκΈλ¨κΈ°κΈ°