본문 바로가기

프로그래머스/스택, 큐

[큐] 프로그래머스 '캐시' - js

반응형

1. 문제

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

 

프로그래머스

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

programmers.co.kr

2. 코드

https://rangsub.tistory.com/124

 

[Algorithm] LRU(Least Recently Used) 알고리즘

INTRO 페이지 교체 알고리즘에는 다양한 알고리즘이 있다. FIFO, LFU, Count-Base ... 이 중 LRU 알고리즘에 대해 소개한다. 1. LRU 알고리즘이란? ◆ 가장 오랜 시간 사용되지 않은 페이지를 교체하는 운영

rangsub.tistory.com

이 문제는 큐의 개념을 사용해서 풀면 된다. LRU 알고리즘의 핵심은 최근에 사용되지 않은 것 중 가장 먼저 들어온 것(오래된 것)을 먼저 삭제 한다는 것이다. 자세한 개념은 위의 링크를 참고하면 된다.

function solution(cacheSize, cities) {
    // 캐시 사이즈가 0이면 그냥 하나씩 다 작업해야하므로
    if(cacheSize === 0) return cities.length * 5;
    // 전체 다 소문자로 만들어 줌
    cities = cities.map((el) => el.toLowerCase());
    let answer = 0;
    // 큐. 앞이 출구 뒤가 입구
    let cache = [];
    
    for(let i=0;i<cities.length;i++){        
        if(!cache.includes(cities[i]) && cache.length < cacheSize) {
            cache.push(cities[i]);
            answer += 5;
        }else if(!cache.includes(cities[i]) && cache.length === cacheSize){
            cache.push(cities[i]);
            cache.shift();
            answer += 5;
        }else{
            let temp = cache.filter((el) => el !== cities[i]);
            temp.push(cities[i]);
            cache = temp;
            answer++;
        }
    }
    
    return answer;
}

이 문제는 테케가 다양해서 좋았다! 프로그래머스 테케가 좀 더 다양했음 좋겠다. 테스트할 때 내가 어떤 테케에서 틀렸는지도 볼 수 있음 너무 좋고..ㅠㅠ

반응형