본문 바로가기
알고리즘 문제풀이/프로그래머스

[프로그래머스 2018 KAKAO BLIND RECRUITMENT] <1차> 캐시

by 선서니 2023. 7. 1.

[문제 바로가기]👇

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

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

 

[알고리즘] 캐시 교체 알고리즘 - LRU, LFU

이 내용을 다루기 앞서 이전에 포스팅했던 캐시에 대해 읽어보시는 것을 추천드립니다. 쿠키, 캐시, 세션 이란 ? 각 개념들과 차이점에 대해 쉽게 알아보자. 쿠키, 캐시, 세션에 대해 설명하기 전

hstory0208.tistory.com

 

LRU 캐시 자바

 

<알고리즘> 3. LRU 캐시 JAVA

가. 무엇인가? a. 캐시 알고리즘 - 데이터를 빠르게 가져오기도 하고 DB 부하를 줄이기 위해 캐시를 많이 사용한다. - 하지만 캐시에도 용량이 있기 때문에 지워주면서 사용해야한다. - 이런 캐시

willbfine.tistory.com

 

댓글