[프로그래머스] 캐시 - javascript

김지원·2022년 2월 9일
0

coding-test

목록 보기
19/25
post-thumbnail

📖 문제링크

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

문제 설명

DB 캐시를 적용할 때 캐시 크기에 따른 실행시간 측정 프로그램을 작성하시오

  • 캐시 크기(cacheSize)와 도시이름 배열(cities)을 입력받는다.

  • cacheSize는 정수이며, 범위는 0 ≦ cacheSize ≦ 30 이다.

  • cities는 도시 이름으로 이뤄진 문자열 배열로, 최대 도시 수는 100,000개이다.

  • 각 도시 이름은 공백, 숫자, 특수문자 등이 없는 영문자로 구성되며, 대소문자 구분을 하지 않는다. 도시 이름은 최대 20자로 이루어져 있다.

  • 조건

    • 캐시 교체 알고리즘은 LRU(Least Recently Used)를 사용한다.
    • cache hit일 경우 실행시간은 1이다.
    • cache miss일 경우 실행시간은 5이다.

👨‍💻 문제풀이

필자가 푼 문제풀이

function solution(cacheSize, cities) {
    const cache = [];
    let time = 0;
    
    if (!cacheSize) return cities.length * 5;
    
    for (let city of cities) {
        let upperCity = city.toUpperCase();
        if (cache.includes(upperCity)) {
            time += 1;
            cache.splice(cache.indexOf(upperCity), 1);
            cache.push(upperCity);
            continue;
        } 
        
        if (cache.length === cacheSize) {
            cache.shift();
            cache.push(upperCity);
            time += 5;
            continue;
        }
        
        cache.push(upperCity);
        time += 5;
    }
    return time;
}

생각보다 간단한 문제였다.
조건이 주어진대로 풀기만하면 되는 문제였다.

여기서 LRU 알고리즘은 가장 최근에 사용하지 않은 것을 삭제하는 것이기 때문에 가장 먼저 들어온 값을 삭제해주었다.

그리고 원래 들어있던 값이 들어오면 가장 최근에 들어온 값으로 바꿔주었다.

2022.02.09

profile
backend-developer

0개의 댓글