코딩테스트

[프로그래머스/Javascript] 캐시

셈인 2023. 7. 18. 21:11

📄 문제

Lv 2. 2018 KAKAO BLIND RECRUITMENT [1차] 캐시

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


🔍 문제 접근

❓ 캐시 교체 알고리즘은 LRU(Least Recently Used)를 사용한다.
💡 FIFO로 캐시를 저장하자.
💡 캐시에 동일한 도시 이름이 저장되는 경우도 고려한다.

 


📝 문제 풀이

function solution(cacheSize, cities) {
    if (0 === cacheSize) {
        return cities.length * 5;
    }

    const cashedCities = [];
    let time = 0;

    cities.forEach(city => {
        const isCashed = cashedCities.findIndex(cashedCity => cashedCity === city.toLowerCase());

        if (isCashed >= 0) {
            cashedCities.splice(isCashed, 1);
            cashedCities.push(city.toLowerCase());
            time += 1;

            return;
        }

        if (cacheSize === cashedCities.length) {
            cashedCities.shift();
        }

        cashedCities.push(city.toLowerCase());
        time += 5;
    });

    return time;
}