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) 캐시에 있는경우에
2) 캐시에 없는경우에
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;
}
}