PROGRAMMERS/KAKAO

[프로그래머스] [JAVA] [Level 2] [2018 KAKAO BLIND RECRUITMENT] [1차] 캐시

c0mmedes 2022. 9. 24. 01:27



import java.util.*;

class Solution {
    public int solution(int cacheSize, String[] cities) {
        int answer = 0;
        int hit = 1;
        int miss = 5;
        
        // LRU 알고리즘 구현을 위한 LinkedList
        LinkedList<String> cache = new LinkedList<>();
        
        // cacheSize가 0 일 경우 전부 cache miss
        if (cacheSize == 0) {
            answer = cities.length * miss;
            return answer;
        }
        
        for(String s : cities){
            // 대문자로 통일
            s = s.toUpperCase();
            
            // 삭제가 성공하면 true반환 -> s가 이미 존재한다.
            if(cache.remove(s)) {
                answer += hit;
            } else{
                // 캐시가 꽉찼을 경우
                if(cache.size()==cacheSize){
                    cache.removeLast();
                }                
                answer += miss;
            }
            cache.addFirst(s);
        }
        
        return answer;
    }
}