LRU 에 대한 개념이 있어야 한다. cache hit, cache miss 와 같이 이해할 수 없던 용어가 많아 LRU에 대해 공부하고 이해하여 풀 수 있었다.
가장 오랫동안 사용되지 않은 데이터는 캐시에서 제거하고 사용 된 적 있는 데이터는 캐시에 남겨 둠으로써 캐시메모리 관리하는 방법이다.
다음은 풀이코드이다.
import java.util.*;
class Solution {
LinkedList<String> list = new LinkedList<>();
int answer = 0;
public int solution(int cacheSize, String[] cities) {
if(cacheSize==0)
return cities.length*5;
for(String str : cities){
str = str.toLowerCase();
if(list.contains(str)){
answer+=1;
list.remove(str);
list.add(str);
}else{
if(list.size() == cacheSize ){
list.remove(0);
}
list.add(str);
answer+=5;
}
}
return answer;
}
}
LinkedList를 사용한 이유는 ArrayList를 사용할 경우 중간 정보를 삭제해야 하기 때문에 시간복잡도 측면에서 손해를 보기 때문이고 toLowerCase와 contains, remove, add 등 여러 함수들을 써먹고 기억해 볼 수 있는 좋은 문제였다.
String
- toLowerCase()
LinkedList
- remove()
- size()
- add()
- contains()
'Algorithm & Data Structures > Programers' 카테고리의 다른 글
Lv 2. 튜플 (0) | 2024.06.13 |
---|---|
Lv 2. 기능개발 (1) | 2024.06.10 |
Lv 2. pH-index (0) | 2024.05.30 |
Lv 2. 할인행사 (0) | 2024.05.29 |
Lv 2. 귤고르기 (0) | 2024.05.26 |