λ¬Έμ μ€λͺ
"λͺ
μμ μ λΉ"μ΄λΌλ TV νλ‘κ·Έλ¨μμλ λ§€μΌ 1λͺ
μ κ°μκ° λ
Έλλ₯Ό λΆλ₯΄κ³ , μμ²μλ€μ λ¬Έμ ν¬νμλ‘ κ°μμκ² μ μλ₯Ό λΆμ¬ν©λλ€. λ§€μΌ μΆμ°ν κ°μμ μ μκ° μ§κΈκΉμ§ μΆμ° κ°μλ€μ μ μ μ€ μμ kλ²μ§Έ μ΄λ΄μ΄λ©΄ ν΄λΉ κ°μμ μ μλ₯Ό λͺ
μμ μ λΉμ΄λΌλ λͺ©λ‘μ μ¬λ € κΈ°λ
ν©λλ€. μ¦ νλ‘κ·Έλ¨ μμ μ΄ν μ΄κΈ°μ kμΌκΉμ§λ λͺ¨λ μΆμ° κ°μμ μ μκ° λͺ
μμ μ λΉμ μ€λ₯΄κ² λ©λλ€. kμΌ λ€μλΆν°λ μΆμ° κ°μμ μ μκ° κΈ°μ‘΄μ λͺ
μμ μ λΉ λͺ©λ‘μ kλ²μ§Έ μμμ κ°μ μ μλ³΄λ€ λ λμΌλ©΄, μΆμ° κ°μμ μ μκ° λͺ
μμ μ λΉμ μ€λ₯΄κ² λκ³ κΈ°μ‘΄μ kλ²μ§Έ μμμ μ μλ λͺ
μμ μ λΉμμ λ΄λ €μ€κ² λ©λλ€.
μ΄ νλ‘κ·Έλ¨μμλ λ§€μΌ "λͺ
μμ μ λΉ"μ μ΅νμ μ μλ₯Ό λ°νν©λλ€. μλ₯Ό λ€μ΄, k = 3μ΄κ³ , 7μΌ λμ μ§νλ κ°μμ μ μκ° [10, 100, 20, 150, 1, 100, 200]μ΄λΌλ©΄, λͺ
μμ μ λΉμμ λ°νλ μ μλ μλμ κ·Έλ¦Όκ³Ό κ°μ΄ [10, 10, 10, 20, 20, 100, 100]μ
λλ€.
λͺ
μμ μ λΉ λͺ©λ‘μ μ μμ κ°μ k, 1μΌλΆν° λ§μ§λ§ λ κΉμ§ μΆμ°ν κ°μλ€μ μ μμΈ scoreκ° μ£Όμ΄μ‘μ λ, λ§€μΌ λ°νλ λͺ
μμ μ λΉμ μ΅νμ μ μλ₯Ό returnνλ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ νμ¬ν
3 ≤ k ≤ 100
7 ≤ scoreμ κΈΈμ΄ ≤ 1,000
0 ≤ score[i] ≤ 2,000
μ μΆλ ₯ μ
3 | [10, 100, 20, 150, 1, 100, 200] | [10, 10, 10, 20, 20, 100, 100] |
4 | [0, 300, 40, 300, 20, 70, 150, 50, 500, 1000] | [0, 0, 0, 0, 20, 40, 70, 70, 150, 300] |
βοΈ νμ΄
λ§€λ² μ λ ¬μ μννλ©΄ μκ°μ΄κ³Όκ° λ μ μμ κ²μ΄λΌκ³ μκ°νκΈ° λλ¬Έμ logNμ μκ°λ³΅μ‘λλ₯Ό κ°μ§λ μ νμ μΈ heap λ¬Έμ λΌκ³ μκ°νλ€.
MinHeapμ μ¬μ©ν΄μ κ°μ₯ μμ μμλ₯Ό λΊ μ μκ²λνκ³ , kλ§νΌμ ν ν¬κΈ°λ₯Ό μ μ§νλ©΄μ λ°λ³΅λ¬Έμ λλ Έλ€. JSλ heapμ μ§μνμ§ μκΈ° λλ¬Έμ μ§μ ꡬννλ heap ν΄λμ€λ₯Ό μ¬μ©νλ€. μΈλΆμμ μ¬μ©ν λ©μλλ‘λ get(), show(), size()κ° μλλ° get()μ μ μΌ μμ κ°μ λΉΌλ μν , show()λ μ μΌ μμ κ°μ μ‘°ννλ μν , size()λ heap μμ μλ μμμ κ°μλ₯Ό λ°ννλ μν μ νλ€.
score λ°°μ΄μ μννλ©΄μ κ°μ heapμ λ£μ΄μ€¬λ€. μ΄λ kκ°μ κ°μλ₯Ό μ μ§νκΈ° μν΄μ size()λ₯Ό ν΅ν΄ heap λ΄ μμμ κ°μλ₯Ό λ°νλ°μ kμ λΉκ΅νλ€. λ§μ½ kλ³΄λ€ ν¬λ€λ©΄ get()μ μ΄μ©ν΄μ μμλ₯Ό 빼쀬λ€. λ§μ§λ§μΌλ‘λ show()μ μ΄μ©ν΄μ κ°μ₯ μμ κ°μ answerμ λ£μ΄μ€¬λ€.
β¨οΈ μ½λ
class MinHeap {
constructor() {
this.heap = [];
this.heap.push(-1e9);
}
insert(value) {
this.heap.push(value);
this.upheap(this.heap.length - 1);
}
upheap(pos) {
let temp = this.heap[pos];
while (temp < this.heap[parseInt(pos / 2)]) {
this.heap[pos] = this.heap[parseInt(pos / 2)];
pos = parseInt(pos / 2);
}
this.heap[pos] = temp;
}
get() {
if (this.size() === 0) return 0;
if (this.size() === 1) return this.heap.pop();
const result = this.heap[1];
this.heap[1] = this.heap.pop();
this.downheap(1, this.heap.length - 1);
return result;
}
downheap(pos, len) {
let temp = this.heap[pos],
child;
while (pos <= parseInt(len / 2)) {
child = pos * 2;
if (child < len && this.heap[child] > this.heap[child + 1]) child++;
if (temp <= this.heap[child]) break;
this.heap[pos] = this.heap[child];
pos = child;
}
this.heap[pos] = temp;
}
show() {
return this.heap[1];
}
size() {
return this.heap.length - 1;
}
}
function solution(k, score) {
var answer = [];
const hallOfFame = new MinHeap();
for (const s of score) {
hallOfFame.insert(s);
if (hallOfFame.size() > k) hallOfFame.get();
answer.push(hallOfFame.show());
}
return answer;
}
'Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Algorithm] λ±κ³Ό μ¬λ€λ¦¬ κ²μ(λ°±μ€ - 16928) (0) | 2023.04.30 |
---|---|
[Algorithm] μΏ ν€ κ΅¬μ (0) | 2023.04.28 |
[Algorithm] μΉ΄μ΄νΈλ€μ΄ (0) | 2023.04.26 |
[Algorithm] μΆμ΅ μ μ (0) | 2023.04.24 |
[Algorithm] μλ¬Όμ μ μ΄μ (0) | 2023.04.23 |