프로그래밍 공방

[프로그래머스] 캐시 본문

개발/문제해결

[프로그래머스] 캐시

hyosupsong 2021. 1. 5. 01:44

문제

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

문제해결방법

1. 도시 이름을 키, 들어온 시간을 값으로 하는 Map을 생성한다.

2. 도시 배열을 앞에서부터 돌면서 Map에 존재하면 1을 더하면서 값을 최근 시간으로 업데이트 해준다.

3. 도시 이름이 Map에 없다면 5를 더하면서 최근 시간을 값으로 해서 Map에 넣어준다.

4. 만약 Map의 사이즈가 cache 사이즈보다 크다면 Map에서 가장 작은 시간을 가지고 있는 키를 제거해준다.

5. 위 과정을 도시 배열의 끝까지 진행하며 시간을 카운트 한다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package Programmers;
 
import java.util.HashMap;
import java.util.Map;
 
public class Solution_캐시 {
 
    public static void removeCache(Map<String, Integer> cache) {
        int ttl = Integer.MAX_VALUE;
        String k = "";
        for(String city : cache.keySet()) {
            if(ttl>cache.get(city)) {
                ttl = cache.get(city);
                k = city;
            }
        }
        cache.remove(k);
    }
    
    public static int solution(int cacheSize, String[] cities) {
        int answer = 0;
        Map<String, Integer> cache = new HashMap<>();
        int ttl = 0;
        for(int i=0; i<cities.length; i++) {
            String city = cities[i].toLowerCase();
            if(cache.containsKey(city)) answer++;
            else {
                answer += 5;
                if(cache.size()>cacheSize) removeCache(cache);
            }
            cache.put(city, ttl++);
        }
        return answer;
    }
    
    public static void main(String[] args) {
        int cacheSize = 3;
        String[] cities = {"Jeju""Pangyo""Seoul""Jeju""Pangyo""Seoul""Jeju""Pangyo""Seoul"};
        System.out.println(solution(cacheSize, cities));
    }
}
cs


코드에 대한 피드백이나 더 좋은 아이디어는 언제나 환영입니다.