π λ¬Έμ
νλ‘κ·Έλλ¨Έμ€ λμ€ν¬ 컨νΈλ‘€λ¬
ꡬνν΄μΌ νλ κ²μ
νλΌλ―Έν°λ‘ μ λ¬λ°μ μμ
λͺ©λ‘(jobs
)μ μ΄λ€ μμλλ‘ μ²λ¦¬ν΄μΌ κ°μ₯ μ΅μμ νκ· μκ°μ μ°Ύμ μ μλμ§λ₯Ό νμ
ν΄μΌ νλ€.
μνμ€μΈ μμ μ΄ μλ€λ©΄ λ¨Όμ λ€μ΄μ¨ μμ μ μ°μ μ²λ¦¬ν΄μΌ νκ³ , μνμ€μΈ μμ μ΄ μμΌλ©΄ κ·Έ μμ μ΄ λλλ μμ κΉμ§ λ€μ΄μ€λ μμ²λ€μ μ²λ¦¬μκ°μ μ€λ¦μ°¨μμΌλ‘ μ λ ¬ν΄μ λκΈ°μ΄μ μ½μ ν μμλλ‘ μννλ€.
jobsμ μμλ [μμ
μ΄ μμ²λλ μμ
, μμ
μ μμμκ°
] ννμ΄λ―λ‘ μμ
μ΄ μμ²λλ μμ
μΌλ‘ μΈμ λκΈ°μ΄μ λ£μ κ²μΈμ§, μμ
μ μμμκ°
μΌλ‘ λκΈ°μ΄ λ΄μμμ μν μμλ₯Ό κ³μ°νλ€.
μ€μν μ μ μμ
λͺ©λ‘ jobs
λ μμ² μκ°μ΄ μ λ ¬λμ΄ μμ§ μλ€. (μ) [[7, 8], [3, 5], [9, 6]]) μνμ€μΈ μμ
μ΄ μλ€λ©΄ λ¨Όμ λ€μ΄μ¨ μμ
μ μ°μ μ²λ¦¬ν΄μΌ νλ―λ‘ μμ² μκ°μ μ€λ¦μ°¨μμΌλ‘ μ λ ¬νλλ‘ νλ€.
1οΈβ£ νλΌλ―Έν°λ‘ λ°μ λ°°μ΄μ μννλ©° 쑰건μ λ°λΌ μλ‘μ΄ λ°°μ΄μ μ½μ νκ³ μ λ ¬νκΈ° μν΄ νμν λ³μλ₯Ό μ μΈνλ€.
1
2
3
4
5
6
7
8
9
10
11
const solution = (jobs) => {
// μμ
μ λκΈ°μ΄ μν μ ν λ³μ μ μΈ λ° μ΄κΈ°νλ₯Ό μννλ€.
const priorityQueue = [];
// time : μμ
μ μννλ©° νμ¬ μμ μ΄ μΈμ μΈμ§ μ μ₯νλ€. μ¦, μ²μ 0msμμ μμνμ¬ 3msλ§νΌ 걸리λ μμ
μ μννλ©΄ timeμ 3μΌλ‘ κ°±μ νλ€.
// index : jobsλ₯Ό λ°λ³΅νκΈ° μν μΈλ±μ€λ€.
// result : κ° μμ
μ μ΄ μν μκ°μ λμ νλ€. μ΄ μμ μκ°μ μμ
μ²λ¦¬ μκ°κ³Ό λκΈ° μκ°μ λν κ°μ΄λ€. μΆν νκ· μκ°μ κ³μ°νκΈ° μν΄ μ¬μ©νλ€.
let time = 0,
index = 0,
result = 0;
};
2οΈβ£ λ¨Όμ λ€μ΄μ¨ μμ μ μ°μ μ²λ¦¬νκΈ° μν΄ μμ² μκ°μ μ€λ¦μ°¨μ μ λ ¬νλ€.
μνμ€μΈ μμ μ΄ μλ€λ©΄ λ¨Όμ λ€μ΄μ¨ μμ μ μ°μ μ²λ¦¬ν΄μΌ νλ―λ‘ μμ² μκ°μ΄ λΉ λ₯Έ μμΌλ‘ μ λ ¬μ΄ νμνλ€.
μμ ννλ [μμ
μ΄ μμ²λλ μμ
, μμ
μ μμμκ°
]μ΄λ―λ‘ 0λ²μ§Έ μμλ‘ λΉκ΅νλ€.
[[7, 8]
, [3, 5]
, [9, 6]
]λΌλ μμ
λͺ©λ‘μ΄ μ λ¬λλ©΄ [[3, 5]
, [7, 8]
, [9, 6]
]λ‘ μ λ ¬λλ€. μ΄ μμ
λͺ©λ‘μ 3msμ μ²μ μμ
μμ²μ ν κ²μ΄λ€.
1
jobs.sort((a, b) => a[0] - b[0]);
3οΈβ£ νμ¬ μμ μ΄μ μ λ€μ΄μ¨ μμ μ λκΈ°μ΄μ μ½μ νκ³ , λκΈ°μ΄ λ΄μμ κ°μ₯ μμ μκ°μ΄ 짧μ μμ μ μμΌλ‘ 보λΈλ€.
1
2
3
4
5
6
7
8
9
// νμ¬ μμ κ³Ό κ°μ₯ λΉ λ₯Έ μμ² μκ°μ΄ κ°κ±°λ ν¬λ©΄ νμ¬ μμ μ΄μ μ λ€μ΄μ¨ μμ
μ λκΈ°μ΄μ μ½μ
νλ€.
if (index < jobs.length && time >= jobs[index][0]) {
priorityQueue.push(jobs[index++]);
// 짧μ μμμκ°μ΄ λ¨Όμ μ²λ¦¬λμ΄μΌ νλ―λ‘ μμμκ°μ μ€λ¦μ°¨μμΌλ‘ μ λ ¬νλ€.
priorityQueue.sort((a, b) => a[1] - b[1]);
continue;
}
4οΈβ£ λκΈ°μ΄μ μλ μμ μ μννλ©° μμ κ³Ό μ΄ μμ μκ°μ κ°±μ νλ€.
νμ¬ μμ μμ λκΈ°μ΄λ‘ μΆκ°ν μμ μ΄ μλ€λ©΄ κ°μ₯ 짧μ μκ°μ΄ μμλλ μμ μ μνν΄μΌ νλ μμ μ΄λ―λ‘ λκΈ°μ΄μ 첫 λ²μ§Έ μμλ₯Ό μ κ±°νλ€. μμ μ΄ μνλ κ²μ΄λ―λ‘ μμ μ΄ μλ£λ νμ μμ κ³Ό ν΄λΉ μμ μ μμλ μκ°μ κ³μ°νμ¬ κ°κ° λ³μμ κ°μ°νλ€.
1
2
3
4
5
if (priorityQueue.length > 0) {
const [requestTime, workingTime] = priorityQueue.shift();
time += workingTime;
result += time - requestTime;
}
5οΈβ£ νμ¬ μμ κΈ°μ€ μ΄μ μ λ€μ΄μ¨ μμ μ΄ μκ³ , λκΈ°μ΄μμ μνν μμ μ΄ μλ€λ©΄
νμ¬ λ°©λ¬Έν jobs μμμ μμ² μκ°μ νμ¬ μμ μΌλ‘ μ λ°μ΄νΈνλ€.
μλ₯Ό λ€μ΄, [[3, 5]
, [7, 8]
, [9, 6]
]λΌλ μμ
λͺ©λ‘μ 첫 λ²μ§Έλ‘ μνν μμ
μ΄ 3ms μμ μ μμ²νλ€. νμ¬ μμ μ΄ 0msλΌλ©΄ νμ¬ μμ μ 3msλ‘ μ
λ°μ΄νΈ ν λκΈ°μ΄μ μ½μ
λ° μ²λ¦¬ν μ μλλ‘ νλ€.
1
2
3
else {
time = jobs[index][0];
}
πΉ μ½λ
μ°μ μμ νλ‘ κ΅¬ννλ €κ³ νλλ° λ§νμ λ€λ₯Έ λΈλ‘κ·Έμμ λ°°μ΄μ νμ©ν νμ΄λ₯Ό μ°Έκ³ ν΄μ ν΄κ²°νλ€.
π μ°Έκ³
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
const solution = (jobs) => {
const priorityQueue = [];
let time = 0,
index = 0,
result = 0;
jobs.sort((a, b) => a[0] - b[0]);
// jobs μνλ₯Ό λλ΄μ§ μμκ±°λ λκΈ°μ΄μ΄ λΉμ΄μμ§ μμΌλ©΄ μμ
μ κ³μ μννλ€.
while (index < jobs.length || priorityQueue.length > 0) {
if (index < jobs.length && time >= jobs[index][0]) {
priorityQueue.push(jobs[index++]);
priorityQueue.sort((a, b) => a[1] - b[1]);
continue;
}
if (priorityQueue.length > 0) {
const [requestTime, workingTime] = priorityQueue.shift();
time += workingTime;
result += time - requestTime;
} else {
time = jobs[index][0];
}
}
// resultλ κ° μμ
μ μ΄ μμ μκ°μ λμ λμ΄μμΌλ―λ‘ νκ· μ μν΄ μμ
μ μλ§νΌ λλ ν λ°ννλ€.
return parseInt(result / jobs.length);
};
β³οΈ λ μ’μ ν΄κ²°μ±
μμμ μΈκΈνλλ‘ μλλ νμΌλ‘ ꡬννλ €κ³ νμλ€. ν΄λμ€λ‘ Heapμ μ μΈνκ³ μμ λͺ©λ‘μ μννλ©° ν΄κ²°ν ν¬μ€νΈλ₯Ό λ°κ²¬νμ¬ λ¨κ²¨λλ€.
Heap ν΄λμ€λ₯Ό μ¬μ©νλ©΄ λ°°μ΄μ shiftλ sort μμ μ νμ§ μμΌλ―λ‘ λ λΉ λ₯΄λ€.
(μ°Έκ³ : λ°°μ΄λ‘ ꡬνν μ½λλ₯Ό μ°Έκ³ ν λΈλ‘κ·Έμ λκΈ)
μ§μ κ°κ°μ μ½λλ₯Ό λλ €λ³΄λ©΄ μλμ κ°μ΄ λμ¨λ€. ν μ€νΈ μΌμ΄μ€λ₯Ό μ μ μμΌλ, μ€κ°μ€κ° νμ μ¬μ©ν κ²κ³Ό λ°°μ΄λ‘ μ¬μ©ν κ²μ μκ°μ΄ ν¬κ² μ°¨μ΄λλ μΌμ΄μ€κ° 보μ΄λλ° μλ§ μμ λ°μ΄ν°κ° λ§μ΄ λ€μ΄μ¨ μΌμ΄μ€κ° μλκΉ μκ°μ΄ λ λ€. λ μ’μ ν΄κ²°μ± μ΄λΌκΈ° 보λ€λ λ΄κ° ν΄κ²°νμ§ λͺ»ν λ°©λ²μΌλ‘ μΆ©λΆν ν΄κ²° κ°λ₯νλ€λ κ²μ μΈμ§νκΈ° μν΄ λ¨κ²¨λλ€!
π μ°Έκ³