프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💡풀이💡
이 문제는 LRU가 무엇인지 알고 있어야 풀 수 있었던 문제로
캐시 교체 알고리즘인 LRU(Least Recently Used)를 구현하는 문제이다
LRU는 메모리에 남아 있는 캐시 중 가장 오래동안 사용하지 않은 캐시를 삭제하고 새로운 캐시로 교체하는 알고리즘이다
그렇기 때문에 계속해서 새로운 데이터가 캐시에 들어온다고 가정하면, 기본 동작은 FIFO이 된다
그래서 Queue로 접근을 했고 이미 캐시에 있는 데이터가 들어올 때는 해당 데이터를 삭제하고 다시 삽입하는 방식으로 구현했다
다만 한 가지 주의할 점은 문제에서는 캐시 크기가 0일 때도 있기 때문에 이 부분도 고려해서 처리를 해줘야 한다
전체 코드
import java.io.*;
import java.util.*;
class Solution {
public int solution(int cacheSize, String[] cities) {
int time = 0; // 총 실행시간 저장
ArrayDeque<String> cache = new ArrayDeque<>();
for(int i=0; i<cities.length; i++) {
String city = cities[i].toLowerCase(); // 전부 소문자로 통일
if(cache.contains(city)) { // cache hit
cache.remove(city);
cache.offer(city);
time += 1;
}
else { // cache miss
if(cache.size() >= cacheSize) {
cache.poll(); // cache가 비어있으면 null을 리턴
}
if(cacheSize > 0) cache.offer(city); // 캐시 크기가 0보다 클 때만 삽입
time += 5;
}
}
return time;
}
}
참고자료
[알고리즘] 캐시 교체 알고리즘 - LRU, LFU
이 내용을 다루기 앞서 이전에 포스팅했던 캐시에 대해 읽어보시는 것을 추천드립니다. 쿠키, 캐시, 세션 이란 ? 각 개념들과 차이점에 대해 쉽게 알아보자. 쿠키, 캐시, 세션에 대해 설명하기 전
hstory0208.tistory.com
<알고리즘> 3. LRU 캐시 JAVA
가. 무엇인가? a. 캐시 알고리즘 - 데이터를 빠르게 가져오기도 하고 DB 부하를 줄이기 위해 캐시를 많이 사용한다. - 하지만 캐시에도 용량이 있기 때문에 지워주면서 사용해야한다. - 이런 캐시
willbfine.tistory.com
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 연습문제] JadenCase 문자열 만들기 (0) | 2023.07.07 |
---|---|
[프로그래머스 2022 KAKAO BLIND RECRUITMENT] k진수에서 소수 개수 구하기 (0) | 2023.07.03 |
[프로그래머스 2023 KAKAO BLIND RECRUITMENT] 이모티콘 할인행사 (0) | 2023.06.19 |
[프로그래머스 2022 KAKAO TECH INTERNSHIP] 성격 유형 검사하기 (0) | 2023.06.18 |
[프로그래머스 2023 KAKAO BLIND RECRUITMENT] 개인정보 수집 유효기간 (0) | 2023.06.17 |
댓글