프로그래머스(Java)-캐시

민지킴·2021년 3월 31일
0

프로그래머스

목록 보기
9/42
post-thumbnail

문제 링크

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

문제 풀이

LRU 를 적용해서 푸는 문제였다.

cacheSize가 0인 경우에는 캐시에 담기지 않으므로 배열의 길이 * 5를 해서 return

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

List.add를 하게되면 들어온 순서대로 인덱스를 부여받는다.
이점을 이용해서 가장 처음에 들어온것이 0번 인덱스 그 다음이 1번 인덱스를 가진다는 생각으로 접근

            if(arr.contains(cities[i])){
                arr.remove(cities[i]);
                arr.add(cities[i]);
                answer+=1;
            }else{
                if(arr.size()<cacheSize){
                    arr.add(cities[i]);
                    answer+=5;
                }else{
                    arr.remove(0);
                    arr.add(cities[i]);
                    answer+=5;
                }
            }

arr.contains()를 이용해서 캐시에 있는지 확인하고
1) 캐시에 있는경우에

  • 가장 최근에 사용되었기에 맨 마지막으로 보내야하므로 arr.remove를해서 삭제하고 다시 arr.add를 해주었다.

2) 캐시에 없는경우에

  • 캐시가 꽉차있다면 가장오래된값을 삭제(arr.remove(0))하고 추가
  • 캐시에 여유가 있다면 그냥 추가

코드

import java.util.*;

class Solution {
    public int solution(int cacheSize, String[] cities) {
        int answer = 0;
        
        List<String>arr = new ArrayList<>();
        
        if(cacheSize==0){
            return cities.length * 5;
        }
        
        
        for(int i=0; i<cities.length; i++){
            cities[i] = cities[i].toLowerCase();
            
            if(arr.contains(cities[i])){
                arr.remove(cities[i]);
                arr.add(cities[i]);
                answer+=1;
            }else{
                if(arr.size()<cacheSize){
                    arr.add(cities[i]);
                    answer+=5;
                }else{
                    arr.remove(0);
                    arr.add(cities[i]);
                    answer+=5;
                }
            }
        }
        
        return answer;
    }
}
profile
하루하루는 성실하게 인생 전체는 되는대로

0개의 댓글