본문 바로가기
프로그래머스

프로그래머스 lv2 - 캐시 (자바) [2018 KAKAO BLIND RECRUITMENT]

by dragonDeok 2024. 6. 15.
728x90

문제


프로그래머스 lv2 - 캐시

풀이


LRU : 가장 오랫동안 사용되지 않은 캐시를 새로운 캐시로 교체하는 알고리즘
LRU 구현 : ArrayList를 사용
캐싱이 되어있는지 여부 : HashMap을 사용

< 이번에 체크할 도시가 캐싱이 되어있는 경우 >
ArrayList에서 해당 도시를 삭제하고 그 도시를 맨 뒤로 새롭게 넣는다.

< 이번에 체크할 도시가 캐싱이 되어 있지 않은 경우 >
ArrayList의 크기가 캐시 사이즈만큼 꽉 찬 경우 맨 앞을 삭제하고 맨 뒤에 현재 도시를 넣음
ArrayList의 크기가 캐시 사이즈만큼 차지 않은 경우 맨 뒤에 현재 도시를 넣음

어려웠던 점


체감상 lv1 같이 느껴질 정도로 쉬운 문제였다.

코드


import java.util.*;
class Solution {
    public int solution(int cacheSize, String[] cities) {
        ArrayList<String> cache = new ArrayList<>(); // LRU
        HashMap<String, Integer> h = new HashMap<>(); // 캐싱
        int answer = 0;

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

            cache.add(city);
            if (cache.size() > cacheSize) {
                String s = cache.get(0);
                cache.remove(0);
                h.remove(s);
            }
        }
        return answer;
    }
}