본문 바로가기

PS

[Programmers] LV2 - 캐시

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

 

문제 파악

 

LRU 캐시 교체 알고리즘을 활용하여 문제 해결을 하자.

Queue를 이용하여 문제를 해결하였다.

 

CacheSize가 0일 경우에는 모든 데이터가 miss 처리 이므로 cities.length * 5를 해서 처리하였고,

 

Queue Size가 CacheSize 만큼 저장되어있지 않다면 Queue에 add 하면서 miss 처리를 하고

Queue Size가 CacheSize와 같을 경우 Queue에 해당 city가 있는지 확인하고 있다면 제거 후 다시 add 하여 맨 뒤로 순서를 조정한다.

 

LRU 캐시 알고리즘에 대해서는 코드가 많이 나오지만 LFU 등 다른 알고리즘은 잘 나오지 않는 것 같다.

한 번 구현을 해보는 것도 좋은 생각일 것 같다.

 

더보기
import java.util.*;
class Solution {
    public int solution(int cacheSize, String[] cities) {
        int answer = 0;
        
        Queue<String> cache = new LinkedList<>();
        
        if(cacheSize == 0){
            answer = cities.length * 5;
        }
        else{            
            for(int idx = 0; idx< cities.length; idx++){
                String city = cities[idx].toLowerCase();
                if(cache.contains(city)){
                    answer++;
                    cache.remove(city);
                    cache.add(city);                    
                }
                else {
                    if(cache.size() >= cacheSize){
                        cache.poll();
                    }
                    cache.add(city);
                    answer+=5;
                }
            }
        }
        
        return answer;
    }
}

 

 

'PS' 카테고리의 다른 글

[BOJ] 1141번 : 접두사  (0) 2021.06.28
[Programmers]LV3 - 길 찾기 게임  (0) 2021.06.27
[Programmers] LV2 - 큰 수 만들기  (0) 2021.06.26
[Programmers] LV2 - 이진 변환 반복하기  (0) 2021.06.26
[Programmers]LV2 - 뉴스 클러스터링  (0) 2021.06.26