[JAVA 문제 풀이] 312. 캐시

프로그래머스 (17680)
Stupefyee's avatar
Jun 11, 2025
[JAVA 문제 풀이] 312. 캐시
notion image
 

내가 작성한 코드

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

stupefyee