캐시 사이즈가 존재하고, 입력받은 배열을 캐시에 추가한다.
캐시에 추가한 배열 요소 중 중복되는 값이 있다면, 해당 값은 캐시의 맨 앞으로 다시 위치하게 된다.
만약 캐시 사이즈가 4이고, 입력받은 배열이 ['a','b','c','d','e','c','a'] 일경우
1) 처음 1번째~4번째 요소는 중복된 요소가 없고, 캐시의 사이즈와 일치하므로 차례대로 추가된다.
=> cache = ['d','c','b','a']
2) 4번 째 요소부터는 캐시사이즈 보다 크므로 cache의 마지막 요소가 삭제 되면서 추가된다.
=> cache = ['e','d','c','b']
3) 5번 째 요소에서는 cache에 중복된 값이 존재하기 때문에 중복된 값을 찾아서 맨 앞으로 다시 위치시킨다.
=> cache = ['c','e','d','b']
4) 입력받은 배열이 끝날 때 까지 위 2번~3번의 과정을 반복한다.
function solution(cacheSize, cities) {
let res = 0;
const cache = new Array(cacheSize).fill(0)
cities.map(x=>x.toUpperCase()).forEach(x => {
const pos = cache.indexOf(x)
if(pos === -1) {
cache.unshift(x);
res += 5;
} else {
cache.splice(pos,1)
cache.unshift(x);
res += 1;
}
if(cache.length > cacheSize) cache.pop();
})
return res;
}