상세 컨텐츠

본문 제목

[프로그래머스] [1차] 캐시

💯ProblemSolving/문제 풀이-Java

by :부셔져버린개발자 2024. 12. 12. 10:09

본문

       문제 요약        

- 문제

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

- 주요 조건

캐시크기(cacheSize : 0이상 30이하)

각 도시 이름 (대소문자 구붅을 하지 않는다)

 

         아이디어        

예외 케이스를 잘 생각해야 하는 문제이다

조건이 주어졌을 때, 끝 값을 확인하고 실행 동작이 달라져야 하는지 생각해보는 습관을 가지자

 Iterator<Map.Entry<String, Integer>> entry = caches.entrySet().iterator();
while(entry.hasNext()) {
	Map.Entry<String, Integer> element = entry.next();
	if(minI > element.getValue()) {
		minI = element.getValue();
		minKey = element.getKey();
     }
}

         소스코드        

import java.util.*;
class Solution {
    public int solution(int cacheSize, String[] cities) {
        int answer = 0;
        // city이름, 
        if(cacheSize == 0) {
            return cities.length * 5;
        }
        Map<String, Integer> caches = new HashMap<>();
        for(int i = 0; i < cities.length; i++) {
            String city = cities[i].toLowerCase();
            if(caches.keySet().contains(city)) { // cache hit
                answer += 1;
            } else { // cache miss
                if(caches.keySet().size() == cacheSize) {
                    int minI = Integer.MAX_VALUE;
                    String minKey = "";
                    Iterator<Map.Entry<String, Integer>> entry = caches.entrySet().iterator();
                    while(entry.hasNext()) {
                        Map.Entry<String, Integer> element = entry.next();
                        if(minI > element.getValue()) {
                            minI = element.getValue();
                            minKey = element.getKey();
                        }
                    }
                    caches.remove(minKey);
                } 
                answer += 5;
            }
            caches.put(city, i); // hit을 하더라도 최근 사용 시간으로 업데이트를 해줘야 한다 
        }
        return answer;
    }
}

 

 

728x90

관련글 더보기