알고리즘/PROGRAMMERS
캐시(Lv.2)
현대타운301
2024. 3. 22. 19:08

문제 설명
입출력 예시
요약
캐시에 저장된 문자열과 비교(대소문자 구분x)해서 있다면 hit 없다면 miss 방식은 LRU
풀이
접근 방식
1. 캐시 크기로 분기점 생성
→ 캐시 사이즈가 0이라면 all miss
2. 캐시에 저장된 문자열과 비교
→ equalsIgnoreCase()를 통해 대소문자 구분 없이 비교
3. hit의 경우(= 캐시에 존재한다면)
→ remove()와 add()로 LRU 방식 구현
코드리뷰
import java.util.*;
class Solution {
public int solution(int cacheSize, String[] cities) {
List<String> list = new ArrayList<>();
int answer = 0;
boolean find;
for(int i = 0; i < cities.length; i++) {
if(cacheSize == 0) {
answer += 5; // 캐시 사이즈가 0인 경우엔 all miss
} else {
find = false;
for(int j = 0; j < list.size(); j++) {
if(list.get(j).equalsIgnoreCase(cities[i])) { // 캐시에 저장된 도시라면
find = true; // 찾았음을 의미하는 find
list.remove(j);
list.add(0, cities[i]);
answer += 1; // hit
break;
}
}
if(!find) { // 캐시에 없는 도시인 경우
if(list.size() < cacheSize) { // 캐시에 들어갈 공간이 있으면
answer += 5; // miss
list.add(0, cities[i]);
} else { // 캐시에 들어갈 공간이 없다면
answer += 5;
list.add(0, cities[i]);
list.remove(list.size()-1); // 마지막 문자열 제거
}
}
}
}
return answer;
}
}