프로그래머스 캐시 (Java,자바)

jonghyukLee·2022년 9월 19일
0

이번에 풀어본 문제는
프로그래머스 캐시 입니다.

📕 문제 링크

❗️코드

import java.util.*;
class Solution {
    public int solution(int cacheSize, String[] cities) {
        int answer = 0;
        // 0일때 예외
        if (cacheSize == 0) {
            return cities.length * 5;
        }
        
        List<String> list = new ArrayList<>();

        for (String next : cities) {
            next = next.toUpperCase();
            // 캐시에 존재하면 +1하고 다시 담음
            if (list.remove(next)) {
                answer++;
                list.add(next);
            }
            else {
                answer += 5;
                //꽉찼으면 하나 삭제
                if (cacheSize == list.size()) {
                    list.remove(0);
                }
                list.add(next);
            }
        }
        return answer;
    }
}

📝 풀이

캐시공간의 크기와 도시 이름이 주어질 때, 히트에 성공하면 +1, 실패하면 +5를 누적하여 answer를 반환하는 문제입니다.
list가 캐시 공간 역할을 하며, remove 함수는 값을 삭제했을 경우 true를 리턴하기 때문에, true일 경우는 hit, false는 miss로 판단하여 두 가지 조건을 판별하면 됩니다.
cacheSize가 0일 경우를 예외처리 해주고, 캐시 공간이 부족할 때는 0번 인덱스를 삭제해주면, 오랫동안 사용되지 않은(리스트 값이 갱신되지 않은) 데이터를 제거할 수 있습니다. (LRU 전략이 문제의 조건)

📜 후기

처음엔 해시맵이 떠올랐는데, 생각보다 간단한 풀이의 문제였습니다!

profile
머무르지 않기!

0개의 댓글