해당 포스팅은 인프런의 "자바스크립트 알고리즘 문제풀이" 강의 중 챕터7의 Least Recently Used 문제 풀이를 다룬다. 삽입정렬로 풀이하였다.
처음에는 단순하게 자바스크립트 내장함수를 이용해서 풀었다.
하지만 해당 문제는 삽입정렬을 이용해서 배열의 원소들을 한 칸씩 뒤로 옮기고 원하는 위치에 값을 할당하라는 의도이다.
const size = 5;
const nums = [1, 2, 3, 2, 6, 2, 3, 5, 7];
console.log(solution(size, nums));
function solution(size, nums) {
const cache = [...Array(size)].fill(0);
nums.forEach(x => {
let pos = -1; // x 원소 위치 idx (x가 cache에 있는지 판별)
for (let i=0; i<size; i++) {
// 현재 작업이 cache에 존재 -> cache hit
if (x === answer[i]) {
pos = i;
}
}
// cache miss
if (pos === -1) {
for (let i=size-1; i>=1; i--) {
answer[i] = answer[i-1];
}
}
// cache hit
else {
for (let i=pos; i>=1; i--) {
answer[i] = answer[i-1];
}
}
answer[0] = x;
})
return nums;
}
const s = 5;
const nums = [1, 2, 3, 2, 6, 2, 3, 5, 7];
console.log(solution(s, nums));
function solution(s, nums) {
const answer = [...Array(s)].fill(0);
nums.forEach(n => {
const idx = answer.indexOf(n);
// 존재하지 않을 시 -> cache miss
if (idx === -1) {
answer.pop();
answer.unshift(n);
}
// 존재할 시 -> cahce hit
else {
const sp = answer.splice(idx, 1);
answer.unshift(...sp);
}
})
return answer;
}