LRU 캐시 알고리즘

이진국·2023년 3월 24일
0

알고리즘

목록 보기
1/1

문제유형

캐시 사이즈가 존재하고, 입력받은 배열을 캐시에 추가한다.
캐시에 추가한 배열 요소 중 중복되는 값이 있다면, 해당 값은 캐시의 맨 앞으로 다시 위치하게 된다.

만약 캐시 사이즈가 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번의 과정을 반복한다.

예제

프로그래머스 - [1차] 캐시찾기

예제문제

구현

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;
}

예제출처 : 프로그래머스

profile
Let's change it from "I can do it" to "I did it."

0개의 댓글