[프로그래머스][1차] 캐시

2020. 4. 13. 13:02프로그래머스/카카오

import java.util.*;

class Solution {
  public int solution(int cacheSize, String[] cities) {
      int answer = 0;
      
      List<String> cache = new ArrayList<>();
      if(cacheSize==0){
          return cities.length * 5;
      }
      
      cities = cityInit(cities);
      
      for(int i=0; i<cities.length; i++){
          if(cache.contains(cities[i])){
              answer ++;
              cache = cacheChangeIndex(cities[i],cache);
          }else{
              answer +=5;
              cache = cacheUpdate(cache,cacheSize,cities[i]);
          }
      }
      return answer;
  }
  
    private String[] cityInit(String[] cities){
        for(int i=0; i<cities.length; i++){
            cities[i] = cities[i].toUpperCase();
        }
        return cities;
    }
    
    private List<String> cacheChangeIndex(String city,List<String> cache){
        for(int i=0; i<cache.size(); i++){
            if(cache.get(i).equals(city)){
                cache.remove(i);
                cache.add(city);
            }
        }
        return cache;
    }
    
    private List<String> cacheUpdate(List<String> cache,int cacheSize,String city){
         if(cache.size()<cacheSize){
                  cache.add(city);
              }else{
                  cache.add(city);
                  cache.remove(0);
         }
           return cache;
    }
     
}

 

1. 캐시사이즈가 0 이면 모두 cache miss이므로 (개수 * 5)로 바로 리턴해줌.

2. 대소문자 상관없어야 하기때문에 모두 대문자로 바꾸어 초기화 시켜줌.

3. 캐쉬에 해당 도시가 있을경우 가장 최근에 조회한 것으로 간주하여 인덱스를 맨 뒤로 바꾸어줌.

4. 캐쉬에 해당 도시가 없을경우 캐쉬사이즈를 고려하여 넣어줌.