문제
내 풀이
function solution(cacheSize, cities) {
var answer = 0;
let cache = [];
if (cacheSize === 0) return cities.length * 5;
for(let city of cities){
city = city.toLowerCase();
let idx = cache.indexOf(city);
if (idx !== -1){
cache.splice(idx, 1);
cache.push(city);
answer += 1;
}
else{
if(cache.length === cacheSize) cache.shift();
cache.push(city);
answer += 5;
}
}
return answer;
}
LRU 알고리즘을 최근에 공부해서 쉽게 풀 수 있었다.
- 캐시 사이즈가 0이면 모든게 cache miss 이므로 도시이름 배열 크기 * 5를 리턴한다.
- 도시이름 배열을 순회하면서 cache hit이면 캐시에서 해당 도시를 삭제하고, 캐시의 맨 뒤에 도시를 푸시한다. 그리고 실행시간에 +1을 해준다.
- cache miss일때는 캐시가 꽉찼다면 맨 앞을 제거하고, 캐시의 맨 뒤에 도시를 푸시한다. 그리고 실행시간에 +5를 해준다.