https://programmers.co.kr/learn/courses/30/lessons/17680
function solution(cacheSize, cities) {
var answer = 0;
let cache = [];
if (cacheSize == 0) return cities.length * 5;
cities.forEach((a) => {
let item = a.toLowerCase();
if (cache.includes(item)) {
let index = cache.indexOf(item);
cache.splice(index, 1);
cache.push(item);
answer += 1;
} else {
if (cache.length >= cacheSize) {
cache.shift();
}
cache.push(item);
answer += 5;
}
});
return answer;
}
케이스를 나눠야하는데
1. 캐쉬에 포함되어있는 단어라면
배열에 들어있는 단어를 제외하고 새로 넣어준다. (LRU이므로)
2. 캐쉬에 없는 경우
2-1. 배열 사이즈 미만이면
새 값을 push한다
2-2. 배열 사이즈 이상이면
가장 첫 값을 제외하고 새 값을 push한다.
중요한 것은
cache.length>= cacheSize
에서 cacheSize가 0인 경우에는 제대로 동작하지 않으므로 예외처리를 해주어야한다.
예외처리 하지 않으면
["LA", "LA"]인 경우 cacheSize가 0이지만 cache에 push되어 6이 됨.(올바른 답은 10)
'Algorithm > PGMS' 카테고리의 다른 글
PGMS - 소수찾기 (0) | 2022.01.13 |
---|---|
PGMS 점프와 순간이동 (0) | 2022.01.10 |
PGMS 전력망을 둘로 나누기 (0) | 2022.01.10 |
PGMS 거리두기 확인하기 (0) | 2021.12.29 |
PGMS 메뉴 리뉴얼 (0) | 2021.12.29 |