π 05 - Least Recently Used(μΉ΄μΉ΄μ€ μΊμ λ¬Έμ λ³ν)
λ§μ½ μΊμμ μ¬μ΄μ¦κ° 5μ΄κ³ μμ μ΄ [2, 3, 1, 6, 7] μμΌλ‘ μ μ₯λμ΄ μλ€κ³ κ°μ ν΄λ³΄μβ
1) Cache Miss: ν΄μΌν μμ μ΄ μΊμμ μλ μνλ‘ μ μνμμ λ§μ½ μλ‘μ΄ μμ μΈ 5λ² μμ μ CPUκ° μ¬μ©νλ€λ©΄ Cache Missκ° λκ³ λͺ¨λ μμ μ΄ λ€λ‘ λ°λ¦° ν 5λ² μμ μ μΊμμ 맨 μμ μμΉνλ€. [5, 2, 3, 1, 6] (7λ² μμ μ μΊμμμ μμ λλ€.)
2) Cache Hit: ν΄μΌν μμ μ΄ μΊμμ μλ μνλ‘ μ μνμμ λ§μ½ 3λ² μμ μ CPUκ° μ¬μ©νλ€λ©΄ Cache Hitμ΄ λκ³ , 3λ² μμ μλ 5, 2λ² μμ μ ν μΉΈ λ€λ‘ λ°λ¦° ν 3λ² μμ μ μΊμμ 맨 μμ μμΉνλ€. [3, 5, 2, 1, 6]
λμ νμ΄ λ°©λ²
μ΄ μ§μ μ νμλ μ½μ μ λ ¬ λ¬Έμ μ νμ΄ λ°©λ²μ μ΄μ©ν΄ νμλ€.
- for λ¬Έμ λλ©΄μ tmp λ³μμ λ°°μ΄μ μλ£λ₯Ό νλμ© μ μ₯νλ€.
- tmpκ° μΊμμ μλ μνμΈμ§ μλμ§λ₯Ό includes() ν¨μλ₯Ό μ΄μ©ν΄ νλ¨νλ€.
- Cache HitμΌ κ²½μ° indexOf() ν¨μλ₯Ό μ΄μ©ν΄ tmpκ° μΊμμμ μμΉν κ³³μ μ°Ύλλ€.
- μμΉν κ³³ μμ μλ μμ μ ν μΉΈ λ€λ‘ λ°λ¦¬κ³ , ν΄λΉ μμ μ μΊμμ 맨 μμ μμΉνλ€.
- Cache MissμΌ κ²½μ° λͺ¨λ μμ μ΄ λ€λ‘ λ°λ¦¬κ³ , ν΄λΉ μμ μ μΊμμ 맨 μμ μμΉνλ€.
π κ°μ¬λ νμ΄ λ°©λ²
κ°μ¬λμ μ½μ μ λ ¬κ³Ό JSμ λ΄μ₯ ν¨μλ₯Ό μ΄μ©νμ¬ λ¬Έμ λ₯Ό νΈμ ¨λ€. μ½μ μ λ ¬μ μ΄μ©ν λ°©λ²μ κ²½μ° λμ νμ΄ λ°©λ²κ³Ό μ μ¬νλ―λ‘ λ΄μ₯ ν¨μλ₯Ό μ΄μ©ν λ°©λ²μ λν΄μ μ¨λ³΄λ €κ³ νλ€. λ³ΈμΈμκ² νΈν λ°©λ²μΌλ‘ νλ©΄ λλ€.
- for λ¬Έμ λλ©΄μ μμ μ΄ μΊμμ μλ μνμΈμ§ μλμ§λ₯Ό νλ¨ν¨κ³Ό λμμ μΊμμμ μμΉν κ³³(pos)μ μ°Ύμ μ μ₯νλ€.
- Cache MissμΌ κ²½μ° unshift() ν¨μλ₯Ό μ΄μ©ν΄ λ°°μ΄μ 맨 μμ μμ μ μΆκ°νλ€. μΆκ°ν ν λ°°μ΄μ κΈΈμ΄κ° μ£Όμ΄μ§ sizeλ₯Ό μλλλ‘ νλ€.
- Cache HitμΌ κ²½μ° slice(pos, 1) ν¨μλ₯Ό μ΄μ©ν΄ ν΄λΉ μμ μ μΊμμμ μ κ±°ν ν μΊμμ 맨 μμ μμΉνλλ‘ νλ€.
π νμ΄
// λμ νμ΄ λ°©λ²
function solution(size, arr) {
let answer = Array.from({ length: size }, () => 0);
arr.forEach((data) => {
let tmp = data;
let i;
// Cashe Hit
if (answer.includes(tmp)) {
let index = answer.indexOf(tmp);
// ν΄λΉ μμ
μμ μλ μμ
μ ν μΉΈ λ€λ‘ λ°λ¦¬κ³ , ν΄λΉ μμ
μ μΊμμ 맨 μμ μμΉ
for (i = index - 1; i >= 0; i--) {
answer[i + 1] = answer[i];
}
}
// Cashe Miss
else {
// λͺ¨λ μμ
μ΄ λ€λ‘ λ°λ¦¬κ³ , ν΄λΉ μμ
μ μΊμμ 맨 μμ μμΉ
for (i = size - 2; i >= 0; i--) {
answer[i + 1] = answer[i];
}
}
answer[i + 1] = tmp;
});
return answer;
}
let arr = [1, 2, 3, 2, 6, 2, 3, 5, 7];
console.log(solution(5, arr));
// κ°μ¬λ νμ΄ λ°©λ²1(μ½μ
μ λ ¬ μμ©)
function solution(size, arr) {
let answer = Array.from({ length: size }, () => 0);
arr.forEach((x) => {
let pos = -1;
for (let i = 0; i < size; i++) if (x === answer[i]) pos = i;
if (pos === -1) {
for (let i = size - 1; i >= 1; i--) {
answer[i] = answer[i - 1];
}
} else {
for (let i = pos; i >= 1; i--) {
answer[i] = answer[i - 1];
}
}
answer[0] = x;
});
return answer;
}
let arr = [1, 2, 3, 2, 6, 2, 3, 5, 7];
console.log(solution(5, arr));
// κ°μ¬λ νμ΄ λ°©λ²2(λ΄μ₯ ν¨μ μ¬μ©)
function solution(size, arr) {
let answer = [];
arr.forEach((x) => {
let pos = -1;
for (let i = 0; i < size; i++) if (x === answer[i]) pos = i;
if (pos === -1) {
answer.unshift(x);
if (answer.length > size) answer.pop();
} else {
answer.splice(pos, 1);
answer.unshift(x);
}
});
return answer;
}
let arr = [1, 2, 3, 2, 6, 2, 3, 5, 7];
console.log(solution(5, arr));
'Algorithm > μΈνλ°(inflearn)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JavaScript/section 7] 07 - μ’ν μ λ ¬ (0) | 2022.10.06 |
---|---|
[JavaScript/section 7] 06 - μ₯λκΎΈλ¬κΈ° νμ (0) | 2022.10.06 |
[JavaScript/section 7] 04 - μ½μ μ λ ¬ (0) | 2022.10.03 |
[JavaScript/section 7] 03 - Special Sort(κ΅¬κΈ μΈν°λ·°) (0) | 2022.10.02 |
[JavaScript/section 7] 02 - λ²λΈ μ λ ¬ (0) | 2022.09.30 |