cacheSize
)만큼 용량 잡을 수 있음cache hit
) : 실행시간 += 1
cache miss
) : 실행시간 += 5
LRU
(Least Recently Used)를 사용캐시 교체 알고리즘은 LRU
(Least Recently Used)
메모리 상에서 가장 최근에 사용된 적이 없는 캐시의 메모리부터 대체하며 새로운 데이터로 갱신
LRU를 구현하기 위해서는 캐시 리스트 안에서 위치 상관 없이(앞, 뒤, 중간 모두 가능) 많은 자료의 삽입과 삭제가 이루어짐
import java.util.LinkedList;
class Solution {
public int solution(int cacheSize, String[] cities) {
int answer = 0;
LinkedList<String> cache = new LinkedList<String>();
int hit = 1;
int miss = 5;
// 캐시 사이즈가 0 = 캐시에 아무것도 못 담음 => 모두 cache miss
if (cacheSize == 0)
return cities.length * miss;
for (String pastCity : cities) {
// 대소문자를 구분하지 않기 때문에 모두 소문자로 변환하여 저장
String city = pastCity.toLowerCase();
if (!cache.isEmpty() && cache.contains(city)) {
// 가장 최근에 사용된 항목은 리스트의 맨 앞에 위치해야 하기 때문에 캐시 안에 있는 값 미리 삭제
cache.remove(cache.indexOf(city));
answer += hit;
} else {
// 이미 캐시 최대 사이즈를 도달했다면
if (cache.size() >= cacheSize) {
// 맨 뒤에 있는 값 삭제
cache.remove(cacheSize - 1);
}
answer += miss;
}
// 가장 최근에 조회한 값 맨 앞에 위치
cache.add(0, city);
}
return answer;
}
}