728x90
문제
풀이
LRU : 가장 오랫동안 사용되지 않은 캐시를 새로운 캐시로 교체하는 알고리즘
LRU 구현 : ArrayList를 사용
캐싱이 되어있는지 여부 : HashMap을 사용
< 이번에 체크할 도시가 캐싱이 되어있는 경우 >
ArrayList에서 해당 도시를 삭제하고 그 도시를 맨 뒤로 새롭게 넣는다.
< 이번에 체크할 도시가 캐싱이 되어 있지 않은 경우 >
ArrayList의 크기가 캐시 사이즈만큼 꽉 찬 경우 맨 앞을 삭제하고 맨 뒤에 현재 도시를 넣음
ArrayList의 크기가 캐시 사이즈만큼 차지 않은 경우 맨 뒤에 현재 도시를 넣음
어려웠던 점
체감상 lv1 같이 느껴질 정도로 쉬운 문제였다.
코드
import java.util.*;
class Solution {
public int solution(int cacheSize, String[] cities) {
ArrayList<String> cache = new ArrayList<>(); // LRU
HashMap<String, Integer> h = new HashMap<>(); // 캐싱
int answer = 0;
for (String city : cities) {
city = city.toLowerCase();
if (h.containsKey(city)) {
answer++;
cache.remove(city);
} else {
answer += 5;
h.put(city, 0);
}
cache.add(city);
if (cache.size() > cacheSize) {
String s = cache.get(0);
cache.remove(0);
h.remove(s);
}
}
return answer;
}
}
'프로그래머스' 카테고리의 다른 글
프로그래머스 lv2 - 피로도 (자바) (0) | 2024.06.17 |
---|---|
프로그래머스 lv2 - 전력망을 둘로 나누기 (자바) (2) | 2024.06.16 |
프로그래머스 lv2 - 뉴스 클러스터링 (자바) [2018 KAKAO BLIND RECRUITMENT] (2) | 2024.06.15 |
프로그래머스 lv2 - 프렌즈4블록 (자바) [2018 KAKAO BLIND RECRUITMENT] (0) | 2024.06.14 |
프로그래머스 lv2 - 방금그곡 (자바) [2018 KAKAO BLIND RECRUITMENT] (0) | 2024.06.13 |