본문으로 바로가기

LinkedHashMap 으로 cache 구현하기

category 나의 주니어 개발 일기/알고리즘 2025. 1. 13. 16:53
728x90
반응형
SMALL

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

ArrayList 를 사용했을때

class Solution {
    private static List<String> cache = new ArrayList<>();
    public static int solution(int cacheSize, String[] cities) {
        int answer = 0;

        if (cacheSize == 0){
            return cities.length * 5;
        }

        for (String city : cities){
            String elem = city.toLowerCase();
            
            if (cache.contains(elem)){
                answer++;
                cache.remove(elem);
                cache.add(elem);
            } else {
                answer+=5;
                if (cache.size() == cacheSize){
                    cache.remove(0);
                }
                cache.add(elem);
            }
        }
        return answer;
    }
}

 

 

 

LinkedHashMap을 사용했을때

class Solution {
       public static int solution(int cacheSize, String[] cities) {
        cache = new LinkedHashMap<>(cacheSize, 0.75f, true){
          @Override
          protected boolean removeEldestEntry(Map.Entry eldest) {
              return size() > cacheSize;
          }
        };

        int answer = 0;
        for (String city : cities){
            String elem = city.toLowerCase();
            if (cache.containsKey(elem)){
                answer+=1;
            } else {
                answer+=5;
            }
            cache.put(elem, 0);
        }

        return answer;
    }
}

무조건 `LinkedHashMap` 3번째 인자에 true 값을 해줘야 한다.

그래야 접근 순서에 맞게 우선순위 정렬을 해준다.(최신 추가된 값이 우선순위가 가장 높게 세팅된다.)

false로 하면 최신 추가 값에 대한 우선순위 갱신이 안된다.

728x90
반응형
LIST

'나의 주니어 개발 일기 > 알고리즘' 카테고리의 다른 글

빅오 표기법이란?  (0) 2024.05.14