ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

Algorithm/Programmers

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

๊ฐœ๋ฐœ๊ฐœ๊ตด๐Ÿธ 2022. 7. 7. 21:04

[๋ฌธ์ œ]

https://school.programmers.co.kr/learn/courses/30/lessons/17680?language=java 

 

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

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

[ํ’€์ด]

์šฐ์„  ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„œ LRU ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด์„œ ์•Œ์•„์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

LRU๋Š” Least Recently Used์˜ ์•ฝ์ž๋กœ, ์ฆ‰ ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ์บ์‹œ๋ฅผ ๊ต์ฒดํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์บ์‹œ์˜ ์—ฌ์œ  ์ €์žฅ๊ณต๊ฐ„์ด ์—†๊ณ , ์บ์‹œ์— ํ•ด๋‹น ๊ฐ’์ด ์—†๋‹ค๋ฉด ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•˜๋˜ ์บ์‹œ๋ฅผ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์บ์‹œ๊ฐ€ ์ฐธ์กฐ๋œ ์‹œ๊ฐ„๋ณ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์–ด์„œ LinkedList<String> cache๋ฅผ ํ†ตํ•ด ์บ์‹œ๋ฅผ ๊ด€๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด๋ฏธ ์บ์‹œ์— ์žˆ๋Š” ๊ฐ’์„ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ์ค‘๊ฐ„์— ์žˆ๋Š” ์บ์‹œ๋ฅผ ๋งจ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ด๋™์‹œ์ผœ์•ผ ํ•˜๋ฏ€๋กœ LinkedList๊ฐ€ ์ ํ•ฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

 

cities[]๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ, ํ•ด๋‹น city๊ฐ€ ์บ์‹œ์— ์กด์žฌํ•˜์ง€ ์•Š๊ณ , ๋งŒ์•ฝ ์บ์‹œ์˜ ์—ฌ์œ  ์ €์žฅ๊ณต๊ฐ„์ด ์—†๋‹ค๋ฉด ๊ฐ€์žฅ ์•ž ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์— city๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋งŒ์•ฝ city๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด cache.indexOf(city)๋ฅผ ํ†ตํ•ด ํ•ด๋‹น city์˜ index์˜ ๊ฐ’์„ ์ฐพ์•„ ์‚ญ์ œํ•˜๊ณ  ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์— ๋„์‹œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

[์ฝ”๋“œ]

import java.util.*;
class Solution {
    public static int time = 0;
    public static LinkedList<String> cache = new LinkedList<String>();
    public int solution(int cacheSize, String[] cities) {
        int answer = 0;
        if(cacheSize == 0) {
            answer = cities.length*5;
        } else {
            for(int i=0;i<cities.length;i++) {
                String city = cities[i].toLowerCase();
                int index = cache.indexOf(city);
                // ํ•ด๋‹น ๋„์‹œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ
                if(index == -1) {
                    if(cache.size() == cacheSize) {
                        cache.removeFirst();
                    }
                    answer += 5;
                } else {
                    cache.remove(index);
                    answer++;
                }
                cache.addLast(city);
            }
        }
        return answer;
    }
}