본문 바로가기
알고리즘/PROGRAMMERS

캐시(Lv.2)

by 현대타운301 2024. 3. 22.

     


     

    문제 설명

     

     

     

    입출력 예시

     

     

    요약

    캐시에 저장된 문자열과 비교(대소문자 구분x)해서 있다면 hit 없다면 miss 방식은 LRU

     


     

    풀이

     

    접근 방식

    1. 캐시 크기로 분기점 생성

      → 캐시 사이즈가 0이라면 all miss

     

    2. 캐시에 저장된 문자열과 비교

      → equalsIgnoreCase()를 통해 대소문자 구분 없이 비교

     

    3. hit의 경우(= 캐시에 존재한다면)

      → remove()와 add()로 LRU 방식 구현

     


     

    코드리뷰

     

    import java.util.*;
    
    class Solution {
        public int solution(int cacheSize, String[] cities) {
            List<String> list = new ArrayList<>();
            int answer = 0;
            boolean find;
            for(int i = 0; i < cities.length; i++) {
                if(cacheSize == 0) {
                    answer += 5;    // 캐시 사이즈가 0인 경우엔 all miss
                } else {
                    find = false;
                    for(int j = 0; j < list.size(); j++) {
                        if(list.get(j).equalsIgnoreCase(cities[i])) {   // 캐시에 저장된 도시라면
                            find = true;	// 찾았음을 의미하는 find
                            list.remove(j);
                            list.add(0, cities[i]);
                            answer += 1;	// hit
                            break;
                        }
                    }
                    if(!find) { // 캐시에 없는 도시인 경우
                        if(list.size() < cacheSize) {   // 캐시에 들어갈 공간이 있으면
                            answer += 5;	// miss
                            list.add(0, cities[i]);
                        } else {    // 캐시에 들어갈 공간이 없다면
                            answer += 5;
                            list.add(0, cities[i]);
                            list.remove(list.size()-1);	// 마지막 문자열 제거
                        }
                    }
                }
            }
            return answer;
        }
    }

     

     

     

    '알고리즘 > PROGRAMMERS' 카테고리의 다른 글

    비밀지도(Lv.1)  (0) 2024.03.22
    의상(Lv.2)  (0) 2024.03.22
    기능개발(Lv.2)  (1) 2024.03.22
    튜플(Lv.2)  (0) 2024.03.22
    피로도(Lv.2)  (0) 2024.03.22