PROGRAMMERS/KAKAO
[프로그래머스] [JAVA] [Level 2] [2018 KAKAO BLIND RECRUITMENT] [1차] 캐시
c0mmedes
2022. 9. 24. 01:27
import java.util.*;
class Solution {
public int solution(int cacheSize, String[] cities) {
int answer = 0;
int hit = 1;
int miss = 5;
// LRU 알고리즘 구현을 위한 LinkedList
LinkedList<String> cache = new LinkedList<>();
// cacheSize가 0 일 경우 전부 cache miss
if (cacheSize == 0) {
answer = cities.length * miss;
return answer;
}
for(String s : cities){
// 대문자로 통일
s = s.toUpperCase();
// 삭제가 성공하면 true반환 -> s가 이미 존재한다.
if(cache.remove(s)) {
answer += hit;
} else{
// 캐시가 꽉찼을 경우
if(cache.size()==cacheSize){
cache.removeLast();
}
answer += miss;
}
cache.addFirst(s);
}
return answer;
}
}
- LRU - https://c0mmedes.tistory.com/75
- LinkedList - https://coding-factory.tistory.com/552
- cache.addFirst(n) - 캐쉬의 맨 앞에 n 추가
- cache.removeLast() - 캐쉬의 마지막 값 삭제
- cache.remove(s) - 캐쉬에 들어있는 's' 삭제 , 여부에 따른 boolean 값 반환