티스토리 뷰

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/17680

 

코딩테스트 연습 - [1차] 캐시

3 [Jeju, Pangyo, Seoul, NewYork, LA, Jeju, Pangyo, Seoul, NewYork, LA] 50 3 [Jeju, Pangyo, Seoul, Jeju, Pangyo, Seoul, Jeju, Pangyo, Seoul] 21 2 [Jeju, Pangyo, Seoul, NewYork, LA, SanFrancisco, Seoul, Rome, Paris, Jeju, NewYork, Rome] 60 5 [Jeju, Pangyo, S

programmers.co.kr

 

2. 설명

캐시크기가 0일 경우엔 그냥 5씩 곱해서 return 해줌.

cache hit일 경우 LRU 알고리즘을 따라야 하므로 우선순위를 맨뒤로 두기 위해서 list에서 삭제하고 다시 삽입하는 방법으로 구현

cache miss일 경우엔 캐시에 삽입하는데, 꽉 찼을 경우엔 맨 처음에꺼 삭제하고 다시 삽입

하는 방향으로 풀었다.

 

3. 코드

import java.util.*;

class Solution {
    public int solution(int cacheSize, String[] cities) {
        int answer = 0;
        ArrayList<String> cache = new ArrayList<>();
        
        if(cacheSize == 0) // 캐시크기가 0
            return cities.length * 5;
        
        for(int i=0; i<cities.length; i++) {
            cities[i] = cities[i].toUpperCase(); // 대소문자 구분X
            if(cache.contains(cities[i])) { // cache hit
                cache.remove(cities[i]);
                cache.add(cities[i]);
                answer += 1;
            }
            else { // cache miss
                if(cache.size()==cacheSize) {
                    cache.remove(0);
                    cache.add(cities[i]);
                }
                else
                    cache.add(cities[i]);
                answer += 5;
            }
        }
        return answer;
    }
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday