https://programmers.co.kr/learn/courses/30/lessons/17680#
function solution(cacheSize, cities) {
var cache = [];
var runTime = 0;
cities = cities.map(x => x.toUpperCase())
for (let i = 0; i < cities.length; i++) {
var city = { name: cities[i], index: i };
var isHit = cache.find(a => a.name === cities[i]);
if (isHit) {
var findIndex = cache.indexOf(isHit);
cache[findIndex].index = i;
runTime += 1;
} else {
cache.push(city);
runTime += 5;
if (cache.length > cacheSize) {
cache.shift();
}
};
cache.sort((a, b) => a.index - b.index);
}
var answer = runTime;
return answer;
}
var cacheSize = 3;
var cities = ["Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul"]
console.log(solution(cacheSize, cities));
캐시가 메모리를 관리하는 알고리즘이다.
알고리즘 자체는 이렇게 되지만 해당 메모리 값마다 우선순위를 부여해야한다. 우선순위는 메모리중 가장 앞에 놓이는 순서이다.
따라서 메모리의 우선순위를 변경하면서 LRU 기법을 충실히 구현한다.
위 코드에서 shift대신 기존 값의 index 값을 찾아 제거 해도 된다.