본문 바로가기

알고리즘

프로그래머스 level2 캐시 - 2018 KAKAO BLIND RECRUITMENT

반응형

오늘은 프로그래머스 level2 문제인 캐시를 풀어보겠습니다.

 

문제는 다음과 같습니다.

https://programmers.co.kr/learn/courses/30/lessons/17680

 

코딩테스트 연습 - [1차] 캐시

3 ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "Jeju", "Pangyo", "Seoul", "NewYork", "LA"] 50 3 ["Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul"] 21 2 ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "SanFrancisco", "Seoul", "Ro

programmers.co.kr

 

* 풀이 방법

 

1. LRU 캐시 알고리즘을 그대로 코딩을 하면 됩니다.

2. 먼저 캐시에 값 유무가 중요합니다.

   2.1. 캐시에 값이 없을 경우

       - 값을 넣고, cache miss이므로 +5 추가

   

  2.2. 캐시에 값이 있을 경우

       - 기존의 값이랑 겹치는지 확인해줍니다.

       - 값이 겹치면 값을 맨 뒤로 옮겨주고 +1 추가

   

 

* 소스 코드

function solution(cacheSize, cities) {
    let answer = 0;
    let cache = [];
    const newCities = cities.map((v) => v.toLowerCase());
    for(let i = 0; i < newCities.length; i++) {
        // 캐시미스일 경우
        if(!cache.includes(newCities[i])) {
            cache.push(newCities[i]);
            
            // 캐시에 가득찬 경우
            if(cache.length > cacheSize) {
                cache.shift();
            }
            
            answer += 5;
        }
        
        // 캐시 히트일 경우
        else if(cache.includes(newCities[i])) {
            cache.splice(cache.indexOf(newCities[i]), 1);
            cache.push(newCities[i]);
            answer += 1;
        }
    }

    if(cacheSize === 0) answer = newCities.length * 5;

    return answer;
}
반응형