이번에 풀어본 문제는
프로그래머스 캐시 입니다.
import java.util.*;
class Solution {
public int solution(int cacheSize, String[] cities) {
int answer = 0;
// 0일때 예외
if (cacheSize == 0) {
return cities.length * 5;
}
List<String> list = new ArrayList<>();
for (String next : cities) {
next = next.toUpperCase();
// 캐시에 존재하면 +1하고 다시 담음
if (list.remove(next)) {
answer++;
list.add(next);
}
else {
answer += 5;
//꽉찼으면 하나 삭제
if (cacheSize == list.size()) {
list.remove(0);
}
list.add(next);
}
}
return answer;
}
}
캐시공간의 크기와 도시 이름이 주어질 때, 히트에 성공하면 +1, 실패하면 +5를 누적하여 answer를 반환하는 문제입니다.
list가 캐시 공간 역할을 하며, remove 함수는 값을 삭제했을 경우 true를 리턴하기 때문에, true일 경우는 hit, false는 miss로 판단하여 두 가지 조건을 판별하면 됩니다.
cacheSize가 0일 경우를 예외처리 해주고, 캐시 공간이 부족할 때는 0번 인덱스를 삭제해주면, 오랫동안 사용되지 않은(리스트 값이 갱신되지 않은) 데이터를 제거할 수 있습니다. (LRU 전략이 문제의 조건)
처음엔 해시맵이 떠올랐는데, 생각보다 간단한 풀이의 문제였습니다!