๐ section07 - 5 - Least Recently Used(์นด์นด์ค ์บ์ ๋ฌธ์ ๋ณํ)
๊ฐ๋ตํ ๋ฌธ์ ์ค๋ช
: LRU
์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ฅ ์ต๊ทผ์ ์ฌ์ฉ๋์ง ์์ ๊ฒ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋ง์ฝ, Cache Miss
์ผ ๋ ๋ค์ task
๊ฐ cache
์ ๋งจ ์์ ์ค๊ณ ๋ชจ๋ ์์
์ด ๋ค๋ก ๋ฐ๋ฆฌ๊ณ , Cache Hit
์ผ ๋ ๋ค์ task
์ ๋์ผํ cache
์์ ์๋ ๊ฐ์ ๋งจ ์์ผ๋ก ๋น๊ฒจ์ค๊ณ ๋๋จธ์ง๋ ํ ์นธ์ฉ ๋ค๋ก ๋ฏธ๋ฃจ๋ ๋ฌธ์ ์ด๋ค. ์๋ฅผ ๋ค์ด ํ์ฌ cache
๊ฐ [1, 2, 3, 0, 0]
์ด๊ณ ๋ค์ task
๋ 2
๋ผ๋ฉด [2, 1, 3, 0, 0, 0]
์ด ๋๋ค.
์ด ๋ฌธ์ ๋ ์ฝ์
์ ๋ ฌ์ ํน์ง์ธ target
์ temp
์ ์ ์ฅํ๊ณ temp
๋ณด๋ค arr[i]=arr[i-1]
์ฒ๋ผ ๋ฎ์ด ์์ฐ๋ ๋ฐฉ์์ ์ด์ฉํ๋ฉด ํ ์ ์๋ ๋ฌธ์ ์ด๋ค. ์ค์ํ ๊ฒ์ ์คํ ์๋๋ฅผ ์ผ๋ง๋ ๋นจ๋ฆฌ ํ๋๋์ธ๋ฐ, ๋ด๊ฐ ์์ฑํ ์ฝ๋๋ 3์ค ๋ฐ๋ณต๋ฌธ์ด์๊ณ , ๊ฐ์ ์ฝ๋๋ 2์ค ๋ฐ๋ณต๋ฌธ์ด์๋ค. ์ด ๋ฌธ์ ๋ฅผ ํ ์ ์๋ ๋ฐฉ๋ฒ์ 4๊ฐ์ง์ธ๋ฐ, ์์ ์ ์
๋ง๋๋ก ํ๋ฉด ๋๋ค.
์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ hit | miss
์ผ๋ ๋ชจ๋ ํ ์นธ์ฉ ์์ผ๋ก ๋ฐ๊ฑฐ๋ ๋น๊ธฐ๋ ๋ฐฉ๋ฒ์ธ๋ฐ ์ฉ ์๋ฟ์ง ์์์ ์ง์ ๊ทธ๋ ค๋ดค๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค์ ๋นํด ์ฝ๋๊ฐ ์งง์ ๊ฒ์ด ์ฅ์ ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ฒ์ ํ์๋ ๋ฐฐ์ด๋๋ฆฌ๊ธฐ3 ๋ฌธ์ ์ฒ๋ผ ์ง๊ธ๊ณผ ๊ฐ์ด target
์ temp
๋ก ๋นผ๋๊ณ ๋ฎ์ด ์์ฐ๋ค๊ฐ ์ ์ผ ๋ง์ง๋ง index
์ ํ ๋นํด์ฃผ๋ ๋ฐฉ๋ฒ์ ์ข
์ข
์ฌ์ฉํ์๋ค.(์์ง ์์ผ๋ ค๊ณ ๊ธ๊น์ง ์ ์๋๋ฐ.. ์ด์ ๋ ๊น๋จน์ง ๋ง๊ณ ์ ๋ ์ฌ์ฉํ์!!)
hit
,miss
๋ ๋ค ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํด์ ํ ์นธ์ฉ ๋ฐ๊ฑฐ๋ ๋น๊ธฐ๊ณ ๋ง์ง๋ง์cache[0]=x
๋ฅผ ๋ฃ๋๋ค.hit
์ผ๋for
๋ฌธ์ ๊ฑฐ๊พธ๋ก ๋ฎ์ด ์์ฐ๊ณ ,miss
์ผ ๋unshift
๋ฅผ ์ด์ฉํ๋ค.hit
์ผ๋while
๋ฌธ์ ๊ฑฐ๊พธ๋ก ๋ฎ์ด ์์ฐ๊ณ ,miss
์ผ ๋unshift
๋ฅผ ์ด์ฉํ๋ค.hit
์ผ๋splice(pos,1)
์ผ๋ก ํด๋น ์์๋ง ๋นผ๋ด์ด ๋งจ ์์unshift
ํด์ฃผ๊ณ ,miss
์ผ ๋unshift
๋ฅผ ์ด์ฉํ๋ค.
// ๋ฐฉ๋ฒ1
let s = 5;
let n = 9;
let order = [1, 2, 3, 2, 6, 2, 3, 5, 7];
console.log(solution(s, n, order));
function solution(s, n, order){
let cache = Array.from({length: s}, () => 0);
for (let x of order){
let pos=-1;
for(let i=0; i<s; i++) if (cache[i] === x) pos=i;
if (pos === -1){
for(let i=s-1; i>=1; i--) cache[i]=cache[i-1]
}else{
for(let i=pos; i>=1; i--) cache[i]=cache[i-1]
}
cache[0]=x
}
return cache.join(" ");
}
// ๋ฐฉ๋ฒ2
let s = 5;
let n = 9;
let order = [1, 2, 3, 2, 6, 2, 3, 5, 7];
console.log(solution(s, n, order));
function solution(s, n, order){
let cache = Array.from({length: s}, () => 0);
for (let x of order){
let pos=-1;
for (let i=0; i<n; i++){
if (cache[i]===x) pos=i
}
if (pos === -1){
cache.unshift(x);
if (cache.length > s) cache.pop();
}
else{
let temp = cache[pos];
for (let i=pos; i>=0; i--) cache[i] = cache[i-1];
cache[0] = temp;
}
}
return cache.join(" ");
}
// ๋ฐฉ๋ฒ3
let s = 5;
let n = 9;
let order = [1, 2, 3, 2, 6, 2, 3, 5, 7];
console.log(solution(s, n, order));
function solution(s, n, order){
let cache = Array.from({length: s}, () => 0);
for (let x of order){
let pos=-1;
for (let i=0; i<n; i++){
if (cache[i]===x) pos=i
}
if (pos === -1){
cache.unshift(x);
if (cache.length > s) cache.pop();
}
else{
let temp = cache[pos];
let left = pos-1;
while(left>=0) {
cache[left+1] = cache[left];
left--;
}
cache[0] = temp;
}
}
return cache.join(" ");
}
// ๋ฐฉ๋ฒ4
let s = 5;
let n = 9;
let order = [1, 2, 3, 2, 6, 2, 3, 5, 7];
console.log(solution(s, n, order));
function solution(s, n, order){
order.forEach((val) => {
let pos = -1;
for (let i=0; i<s; i++) if (cache[i] === val) pos = i;
if (pos === -1) {
cache.unshift(val);
if(cache.length>s) cache.pop();
} else {
cache.splice(pos, 1);
cache.unshift(val)
}
return cache.join(" ");
});
}
๋๊ธ