자바/코딩테스트

[프로그래머스] [1차] 캐시 - Java(자바)

대전집주인 2024. 3. 27. 17:44
728x90
SMALL

 

문제 이해

  • LRU(Least Recently Used) 알고리즘으로 캐시에 데이터를 할당할때 캐시가 꽉차면 최근에 사용안한 캐시를 지우는 알고리즘이다.
  • 도시의 이름은 대소문자 가리지 않는다. toUpperCase() 사용
  • 캐시를 List 객체를 사용하여 캐시에 같은 도시명이 존재하면 해당 리스트 index 삭제후 맨뒤에 도시 추가 실행시간 +1
  • 리스트에 존재하지 않으면 실행시간 +5
  • 캐시에 데이터가 존재하는지 확인하는 함수 생성 exitsCache();
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;
        }
        
        for(String str : cities){
            String s = str.toUpperCase();
            int index = exitsCache(s, cache);
            if(index > -1){
                cache.remove(index);
                cache.add(s);
                answer++;
                continue;
            }else{
                answer += 5;
            }
            
            if(cache.size()>=cacheSize){
                cache.add(s);
                cache.remove(0);
                continue;
            }
            
            cache.add(s);
        }
        
        return answer;
    }
    
    public static int exitsCache(String str, List<String> cache){
        for(int i = 0; i<cache.size(); i++){
            if(cache.get(i) != null){
                if(cache.get(i).equals(str)){
                    return i;
                }
            }            
        }        
        return -1;            
    }
}
728x90
LIST