
내가 작성한 코드
import java.util.*;
class Solution {
public int solution(int cacheSize, String[] cities) {
Stack<String> cache = new Stack<>();
int answer = 0;
if (cacheSize == 0) {
return cities.length * 5; // 캐시 사이즈가 0이면 모든 요청이 캐시 미스
}
for (String city : cities) {
String cityLower = city.toLowerCase(); // 대소문자 구분 없이 처리
// 캐시 히트
if (cache.contains(cityLower)) {
answer += 1;
cache.remove(cityLower); // 기존 위치에서 제거
cache.push(cityLower); // 가장 최근에 사용한 것으로 업데이트
} else { // 캐시 미스
answer += 5;
cache.push(cityLower); // 캐시에 추가
if (cache.size() > cacheSize) { // 캐시가 가득 찼으면
cache.remove(0); // 가장 오래된 항목 제거
}
}
}
return answer;
}
}
다른 사람의 코드
import java.util.*;
class Solution {
public int solution(int cacheSize, String[] cities) {
LinkedList<String> cache = new LinkedList<>(); // LRU 캐시 역할을 하는 리스트
int answer = 0;
if (cacheSize == 0) {
return cities.length * 5; // 캐시 크기가 0이면 모두 미스
}
for (String city : cities) {
String cityLower = city.toLowerCase(); // 대소문자 구분 없이 처리
if (cache.remove(cityLower)) { // 이미 캐시에 있으면(히트)
answer += 1;
} else { // 캐시에 없으면(미스)
answer += 5;
if (cache.size() == cacheSize) { // 캐시가 가득 찼으면
cache.removeFirst(); // 가장 오래된 도시 제거
}
}
cache.add(cityLower); // 항상 가장 최근에 사용한 도시를 뒤에 추가
}
return answer;
}
}
Stack
대신LinkedList
를 사용하여LRU
(Least Recently Used)
에 더 적합한 형태로 변환
Share article