유형: 페이지 알고리즘 구현
문제: 프로그래머스 - [1차] 캐시
LRU 알고리즘을 알고있다면 크게 어렵지 않게 구현할 수 있다. 일단 난 해당 안 됨
LRU (Least Recently Used) 알고리즘
가장 오래 참조되지 않은 페이지를 교체하는 방법
그래서 LRU 알고리즘에 대해 먼저 공부했다. 알고리즘을 이해하고 나니 재밌어서 따로 포스팅했다.
🔗 eunsilson - [Algorithm] LRU 페이지 교체 알고리즘의 실행 과정
문제에서 주어지는 cities
들을 cacheSize
크기의 리스트에 하나씩 넣으며 페이지 교체를 구현하면 된다.
LRU 알고리즘을 사용할 때 필요한 기능을 생각해봤다.
ArrayList로 생각했던 기능들을 모두 구현할 수 있을 것 같아 ArrayList
를 사용했다.
cacheSize
가 0
일 때 cities * 5
city
가 없어 모두 misscity
가 있으면 hit
+ 해당 city
를 다시 넣음city
가 없으면 miss
city
삭제하고 city
넣기time
반환import java.util.ArrayList;
class Solution {
public int solution(int cacheSize, String[] cities) {
if (cacheSize == 0) { // cache size 0
return cities.length * 5;
}
// 소문자 변환
for (int i = 0; i < cities.length; i++) {
cities[i] = cities[i].toLowerCase();
}
ArrayList<String> cache = new ArrayList<>();
int time = 0;
for (String city : cities) {
if (cache.contains(city)) { // hit
time += 1;
cache.remove(city);
cache.add(city);
} else { // miss
time += 5;
if (cache.size() == cacheSize) {
cache.remove(0);
}
cache.add(city);
}
}
return time;
}
}