μΉ΄μΉ΄μ€ μΊμ λ¬Έμ λ³ν(μ½μ μ λ ¬ μμ©)
λ¬Έμ (μΆμ² : μΈνλ° μλ°μ€ν¬λ¦½νΈ μκ³ λ¦¬μ¦ λ¬Έμ νμ΄ κ°μ, μ 보μ¬λ¦ΌνΌμλ)
μΊμλ©λͺ¨λ¦¬λ CPUμ μ£ΌκΈ°μ΅μ₯μΉ(DRAM) μ¬μ΄μ κ³ μμ μμ λ©λͺ¨λ¦¬λ‘μ CPUκ° μ²λ¦¬ν μμ μ μ μ₯ν΄ λμλ€κ° νμν λ°λ‘ μ¬μ©ν΄μ μ²λ¦¬μλλ₯Ό λμ΄λ μ₯μΉμ΄λ€. μλ λΉμΈκ³ μ©λμ΄ μμ ν¨μ¨μ μΌλ‘ μ¬μ©ν΄μΌ νλ€. μ² μμ μ»΄ν¨ν°λ μΊμλ©λͺ¨λ¦¬ μ¬μ© κ·μΉμ΄ LRU μκ³ λ¦¬μ¦μ λ° λ₯Έλ€. LRU μκ³ λ¦¬μ¦μ 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κ° λκ³ , 63λ² μμ μλ 5, 2λ² μμ μ ν μΉΈ λ€λ‘ λ°λ¦¬κ³ , 3λ²μ΄ 맨 μμΌ
λ‘ μμΉνκ² λλ€. 5 2 3 1 6 ---> 3 5 2 1 6
μΊμμ ν¬κΈ°κ° μ£Όμ΄μ§κ³ , μΊμκ° λΉμ΄μλ μνμμ Nκ°μ μμ μ CPUκ° μ°¨λ‘λ‘ μ²λ¦¬νλ€λ©΄ Nκ°μ μμ μ μ²λ¦¬ν ν μΊμλ©λͺ¨λ¦¬μ μνλ₯Ό κ°μ₯ μ΅κ·Ό μ¬μ©λ μμ λΆν° μ°¨λ‘λλ‘ μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμΈμ.
β£ μ
λ ₯μ€λͺ
첫 λ²μ§Έ μ€μ μΊμμ ν¬κΈ°μΈ S(3<=S<=10)μ μμ
μ κ°μ N(5<=N<=1,000)μ΄ μ
λ ₯λλ€. λ λ²μ§Έ μ€μ Nκ°μ μμ
λ²νΈκ° μ²λ¦¬μμΌλ‘ μ£Όμ΄μ§λ€. μμ
λ²νΈλ 1 ~100 μ΄λ€.
β£ μΆλ ₯μ€λͺ
λ§μ§λ§ μμ
ν μΊμλ©λͺ¨λ¦¬μ μνλ₯Ό κ°μ₯ μ΅κ·Ό μ¬μ©λ μμ
λΆν° μ°¨λ‘λ‘ μΆλ ₯ν©λλ€.
β£ μ λ ₯μμ 1
5 9
1 2 3 2 6 2 3 5 7
β£ μΆλ ₯μμ 1
7 5 3 2 6
[μΊμ λ©λͺ¨λ¦¬ μν λ³ν]
10000
21000
32100
23100
62310
26310
32610
53261
75326
Tip

λ¬Έμ νμ΄
//κ°μ λ£κ³ λ΄κ° λ€μ μμ±ν λ΅
function solution(cacheSize, arr){
let cacheMemory = Array.from({length : cacheSize}, (v)=>0);
arr.forEach(element =>{
let pos = -1;
for(let i = 0 ; i < cacheSize ; i++){
if(cacheMemory[i] === element) pos = i;
}
if(pos === -1){
for(let i = cacheMemory.length - 1 ; i >= 1 ; i--){
cacheMemory[i] = cacheMemory[i-1];
}
}else{
for(let i = pos ; i >= 1 ; i--){
cacheMemory[i] = cacheMemory[i-1];
}
}
cacheMemory[0] = element;
})
return cacheMemory;
}
let arr3=[1, 2, 3, 2, 6, 2, 3, 5, 7, 1];
console.log(solution(5, arr3));