๐Ÿค–/์•Œ๊ณ ๋ฆฌ์ฆ˜ ์žฌํ™œ์šด๋™

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Java] ์บ์‹œ

sssbin 2025. 3. 21. 15:30

 

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 


์ฒ˜์Œ ์ฝ”๋“œ

import java.util.*;

class Solution {
    public int solution(int cacheSize, String[] cities) {
        if (cacheSize == 0) {
            return 5 * cities.length;
        }
        
        Deque<String> deque = new ArrayDeque<>();
        Set<String> set = new HashSet<>();
        int answer = 0;
        
        for (String c : cities) {
            String city = c.toLowerCase();
            int qsize = deque.size();
            
            /** cache hit **/
            if (set.contains(city)) {
                answer++;
                
                // ๋‹ค๋ฅธ ์š”์†Œ๋“ค ๋‹ค์‹œ ๋‹ค ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ 
                for (int j=0; j<qsize; j++) {
                    String q = deque.poll();
                    if (!q.equals(city)) {
                        deque.add(q);
                    }
                }
                
                // ๋งˆ์ง€๋ง‰์— ํ˜„์žฌ ๋“ค์–ด์˜จ ์ž…๋ ฅ ์ถ”๊ฐ€
                deque.add(city);
                continue;
            }
            
            /** cache miss **/
            // ํ˜„์žฌ ์บ์‹œ๊ฐ€ ๋‹ค ์ฐจ์žˆ๋Š” ๊ฒฝ์šฐ ๋นผ์ฃผ๊ณ 
            if (qsize >= cacheSize) {
                String q = deque.poll();
                set.remove(q);
            }
            
            // ํ˜„์žฌ ๋“ค์–ด์˜จ ์ž…๋ ฅ ์ถ”๊ฐ€
            deque.add(city);
            set.add(city);
            answer += 5;
        }
        
        return answer;
    }
}

 

์ฒ˜์Œ์— PriorityQueue ์ด์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค๊ฐ€ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์–ด์ฐจํ”ผ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ, ์šฐ์„ ์ˆœ์œ„ ํ๊ฐ€ ํ•„์š” ์—†์—ˆ๋‹ค. Deque๋กœ ๋ณ€๊ฒฝ

๋˜, Map ์ด์šฉํ–ˆ๋‹ค๊ฐ€ ๊ฐ’์ด ๋ช‡ ๋ฒˆ ๋‚˜ํƒ€๋‚ฌ๋Š”์ง€๋„ ํ•„์š”๊ฐ€ ์—†์—ˆ๋‹ค. Set์œผ๋กœ ๋ณ€๊ฒฝ

 

์ œ์ถœ ํ›„ ๋‹ค๋ฅธ ํ’€์ด๋“ค์„ ๋ณด๋‹ˆ ๋‹ค๋“ค ๋„ˆ๋ฌด ๊น”๋”ํ•˜๊ฒŒ ํ‘ผ ๊ฒƒ์ด ์•„๋‹Œ๊ฐ€...!! ์ €๊ฒƒ๋„ ๋งŽ์ด ๊ณ ์นœ ๊ฑฐ์˜€๋Š”๋ฐ..ใ… ใ… ใ…‹ใ…‹

ํ ์ž์ฒด์—์„œ contains, remove ํ•  ์ƒ๊ฐ์„ ์ „ํ˜€ ๋ชปํ–ˆ๋‹ค.

 


 

๋ณ€๊ฒฝ ์ฝ”๋“œ

 

import java.util.*;

class Solution {
    public int solution(int cacheSize, String[] cities) {
        if (cacheSize == 0) {
            return 5 * cities.length;
        }
        
        Deque<String> deque = new ArrayDeque<>();
        int answer = 0;
        
        for (String c : cities) {
            String city = c.toLowerCase();
            
            /** cache hit **/
            if (deque.contains(city)) {
                deque.remove(city);
                deque.add(city);
                answer++;
                continue;
            }
            
            /** cache miss **/
            if (deque.size() >= cacheSize) {
                deque.poll();
            }
            deque.add(city);
            answer += 5;
        }
        
        return answer;
    }
}

 

ํ›จ์”ฌ ๊น”๋”ํ•ด์กŒ๋‹ค.

 

 

์ฐจ์ด๋Š” ๋ฏธ๋ฏธํ•˜์ง€๋งŒ ํ‰๊ท  ์‹คํ–‰ ์‹œ๊ฐ„๋„ ์ค„์–ด๋“ค์—ˆ๋‹ค.