[프로그래머스 Lv.2] 캐시

김민지·2024년 5월 13일
0

✨ 정답 ✨

function solution(cacheSize, cities) {
    let answer=0;
    let cache=[];
    if (cacheSize===0){
        return cities.length*5;
    }
    while(cities.length>0){
        let city=cities.shift().toLowerCase();
        if (cache.includes(city)){
            cache.splice(cache.indexOf(city),1);
            cache.push(city);
            answer+=1;
        }else{
            if (cache.length===cacheSize){
                cache.shift();
            }
            cache.push(city);
            answer+=5;
        }
    }
  return answer;
}

🧵 참고한 정답지 🧵

💡💡 해설 💡💡

내 코드 설명
정처기를 공부하고 나니 보다 이 문제를 더 잘 이해하고 풀 수 있게 되었다.
다만 LRU(Least Recently Used)를 LFU(Least Frequently Used)로 잘못 읽어서 중간에 멘붕이 왔었다.
일단 이 문제는 LRU만 알면 생각보다 간단하다는거. 예전에 처음 봤을 때는 멘붕 왔었는데.
cacheSize가 0이면 저장해둘 수 있는 공간이 없으니까 실행시간은 무조건 5씩 든다.
이제 cities에서 맨 앞 요소(city라고 지정)를 하나씩 꺼내면서 실행시간을 구하면 되는데 이 문제에서는 toLowerCase()를 꼭 해주어야 한다. 테스트케이스에서 자꾸 실패가 뜨길래 뭔가 했더니 cities에 newyork NewYork 이런 식으로 일관성 없이 들어가 있었다.
자 이렇게 shift()로 맨 앞 요소를 꺼내주고 toLowerCase()까지 해주었다면 cache.includes()로 cache에 이 요소가 있는지 확인해야 한다. 만약에 존재한다면 이 요소를 맨 뒤로 보내주어야 하므로 cache.splice(cache.indexOf(city),1)를 한 후, cache.push(city)를 해 주어야 한다.
만약에 cache에 존재하지 않는다면 cache가 꽉 차 있는지 확인하고, 꽉 차 있다면 cache.shift()로 맨 앞에 있는 요소를 빼주고 city를 push 해준다.

profile
이건 대체 어떻게 만든 거지?

0개의 댓글

관련 채용 정보