[μΈνλ° C++] 37. Least Recently Used (μΉ΄μΉ΄μ€ μΊμ λ¬Έμ λ³ν)
π§ λ¬Έμ
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κ° λκ³ , 3λ² μμ μλ 5, 2λ² μμ μ ν μΉΈ λ€λ‘ λ°λ¦¬κ³ , 3λ²μ΄ 맨 μμΌλ‘ μμΉνκ² λλ€. 5 2 3 1 6 π 3 5 2 1 6
μΊμμ ν¬κΈ°κ° μ£Όμ΄μ§κ³ , μΊμκ° λΉμ΄μλ μνμμ nκ°μ μμ μ cpuκ° μ°¨λ‘λ‘ μ²λ¦¬νλ€λ©΄ nκ°μ μμ μ μ²λ¦¬ν ν μΊμ λ©λͺ¨λ¦¬μ μνλ₯Ό κ°μ₯ μ΅κ·Ό μ¬μ©λ μμ λΆν° μ°¨λ‘λλ‘ μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμΈμ.
π§ μ λ ₯
첫 λ²μ§Έ μ€μ μΊμμ ν¬κΈ°μΈ S(3~10)μ μμ μ κ°μ N(5~1000)μ΄ μ λ ₯λλ€.
λ λ²μ§Έ μ€μ Nκ°μ μμ λ²νΈκ° μ²λ¦¬μμΌλ‘ μ£Όμ΄μ§λ€. μμ λ²νΈλ 1~100 μ΄λ€.
π§ μΆλ ₯
λ§μ§λ§ μμ ν μΊμ λ©λͺ¨λ¦¬μ μνλ₯Ό κ°μ₯ μ΅κ·Ό μ¬μ©λ μμ λΆν° μ°¨λ‘λ‘ μΆλ ₯ν©λλ€.
μΊμλ©λͺ¨λ¦¬κ° λΉμ΄ μλ λΆλΆμ 0μΌλ‘ μΆλ ₯ν©λλ€.


π§ 1νΈ (κ°μ νμ΄)
μ½μ μ λ ¬ νμ©. μ μλμ μ΄λ»κ² μ΄λ° μκ°μ νμ ¨μκΉ..! λλ a[0]μλ§ μ§μ€νλλ°.. π
#include <iostream>
#include <vector>
#include<algorithm>
using namespace std;
int main(void){
freopen("input.txt", "rt", stdin);
int s, n, a, pos, i, j;
cin >> s >> n;
int c[s];
for(i = 1; i <= n; ++i){
cin >> a;
pos = -1;
for(j = 0; j < s; ++j){
if(c[j] == a){
pos = j;
}
}
if(pos == -1){
for(j = s-1; j >= 1; --j){
c[j] = c[j-1];
}
}
else{
for(j = pos; j>=1; --j){
c[j] = c[j-1];
}
}
c[0] = a;
}
for(int i = 0; i < s; ++i){
cout << c[i] << ' ';
}
return 0;
}
