ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
LRU(Least Recently Used) ์๊ณ ๋ฆฌ์ฆ
- ์บ์(Cache)์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ
- ์บ์๊ฐ ์ฌ์ฉํ๋ ๋ฆฌ์์ค์ ํฌ๊ธฐ๋ ์ ํ๋์ด ์์
- ์บ์๋ ์ ํ๋ ๋ฆฌ์์ค ๋ด์์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ ์ฅ ๋ฐ ์ฐธ์กฐํ ์ ์์ด์ผ ํจ
- ๋ฉ๋ชจ๋ฆฌ ์์์ ๊ฐ์ฅ ์ต๊ทผ์ ์ฌ์ฉ๋ ์ ์ด ์๋ ์บ์์ ๋ฉ๋ชจ๋ฆฌ๋ถํฐ ๋์ฒดํ๋ฉฐ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์
์ฝ๋
function solution(s, w) {
let answer = Array.from({length: s});
for(let i = 0; i < w.length; i++) {
if(!answer.includes(w[i])) { //Cache Miss์ผ ๊ฒฝ์ฐ
if(answer.length === s) { //๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์ฆ๊ฐ ๋ชจ๋ ์ฐผ์ ๊ฒฝ์ฐ
answer.pop(); //๊ฐ์ฅ ์ต๊ทผ์ ์ฌ์ฉ๋ ์ ์๋ ๋ฐ์ดํฐ ์ญ์
answer.unshift(w[i]);
} else {
answer.unshift(w[i]);
}
} else { //Cache Hit์ผ ๊ฒฝ์ฐ
let pos = answer.indexOf(w[i]); //ํด๋น ์์
๊ณผ ๋์ผํ๋ฉด์ ๊ฐ์ฅ ์ต๊ทผ์ ์ ์ฌ๋ ๋ฐ์ดํฐ ์์น๋ฅผ ํ์
for(let j = pos; j > 0; j--) {
[answer[j - 1], answer[j]] = [answer[j], answer[j - 1]];
}
}
}
return answer;
}
let size = 5;
let work = [1, 2, 3, 2, 6, 2, 3, 5, 7]
console.log(solution(size, work));
function solution(s, w) {
let answer = Array.from({length: s});
w.forEach(x => {
let pos = -1;
for(let i = 0; i < size; i++) {
if(answer[i] === x) pos = i;
}
if(pos === -1) {
answer.unshift(x);
if(answer.length > s) answer.pop();
}
else {
answer.splice(pos, 1); //ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ๊ฒฝ์ฐ ์๋์ผ๋ก ๊ธฐ์กด ๋ฐ์ดํฐ๋ค์ ํ์นธ์ฉ ๋ค๋ก ์ด๋
answer.unshift(x);
}
})
return answer;
}
let size = 5;
let work = [1, 2, 3, 2, 6, 2, 3, 5, 7]
console.log(solution(size, work));
์ฝ๋_์ฝ์ ์ ๋ ฌ
function solution(s, w) {
let answer = Array.from({length: s});
w.forEach(x => {
let pos = -1;
for(let i = 0; i < s; i++) {
if(answer[i] === x) { //Cache Hit์ผ ๊ฒฝ์ฐ
pos = i; //ํด๋น ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ์์น ์ ์ฅ
}
}
if(pos === -1){ //Cache Miss์ผ ๊ฒฝ์ฐ
for(let i = s - 1; i >= 1; i--) { //๋งจ ๋ค์์๋ถํฐ ๋งจ ์ ์ด์ ๊น์ง ์ํ
answer[i] = answer[i - 1]; //์ฝ์
์ ๋ ฌ ์ํ
}
}
else {
for(let i = pos; i >= 1; i--) { //Cache Hit์ผ ๊ฒฝ์ฐ์๋ ํด๋น ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ์์น๋ถํฐ ์ํ
answer[i] = answer[i - 1];
}
}
answer[0] = x; //๋ฉ๋ชจ๋ฆฌ ์ ๊ฐ์ฅ ๋งจ ์์ ์ ์ฅ(์ฝ์
์ ๋ ฌ๋ก ์ธํด ๊ฐ์ฅ ๋งจ ์์ ๋น์ด์ ธ ์์)
})
return answer;
}
let size = 5;
let work = [1, 2, 3, 2, 6, 2, 3, 5, 7]
console.log(solution(size, work));
'์๊ณ ๋ฆฌ์ฆ > ํ๊ทธ ๋ณ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ขํ ์ ๋ ฌ (0) | 2021.07.22 |
---|---|
์ฅ๋๊พธ๋ฌ๊ธฐ ํ์ (0) | 2021.07.21 |
์ฝ์ ์ ๋ ฌ (0) | 2021.07.19 |
Special Sort (0) | 2021.07.18 |
๋ฒ๋ธ ์ ๋ ฌ (0) | 2021.07.18 |
๋๊ธ