๐Ÿ’ป ๊ฐœ๋ฐœ/๐Ÿ“ˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜

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

EastShine_ 2023. 8. 9. 13:25

 

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] [1์ฐจ] ์บ์‹œ (LV.2)

 

๋ฌธ์ œ๋งํฌ

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

 

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

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

programmers.co.kr

 

 

ํ’€์ด ๊ณผ์ •

 

1. ์šฐ์„  ์บ์‹œ ์‚ฌ์ด์ฆˆ๊ฐ€ 0์ด๋ฉด, cache hit์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋ฐฐ์—ด๊ธธ์ด * 5๋ฅผ ํ•ด์„œ ๋ฐ”๋กœ return ํ•ด์ค€๋‹ค.

 

2. ์บ์‹œ ์‚ฌ์ด์ฆˆ์— ๋งž๊ฒŒ ๋ฌธ์ž์—ด์„ ๋‹ด์„ ๋ฐฐ์—ด cache๊ณผ ํ•ด๋‹น ๋ฌธ์ž์—ด์ด ์บ์‹œ์— ๋ช‡ ํ„ด๋™์•ˆ ๋‹ด๊ณ  ์žˆ์—ˆ๋Š”์ง€ ์นด์šดํŠธํ•  ์ •์ˆ˜ ๋ฐฐ์—ด cnt์„ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค.

 

3. ๋จผ์ € ์ž…๋ ฅ๋ฐ›์€ ๋„์‹œ์ด๋ฆ„ ๋ฐฐ์—ด cities๋ฅผ for๋ฌธ์œผ๋กœ ๋Œ๋ฉฐ ํ•˜๋‚˜์”ฉ ์บ์‹œ์— ๋„ฃ์–ด์ค€๋‹ค. ๋‹ค๋งŒ ๋„ฃ์–ด์ค„ ๋•Œ LRU ์บ์‹œ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋”ฐ๋ผ์„œ ํฌ๊ฒŒ ๋‘ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

1. ์บ์‹œ์— ํ•ด๋‹น ๋„์‹œ์ด๋ฆ„์ด ์žˆ๋Š”์ง€? (cache hit)
2. ์บ์‹œ์— ํ•ด๋‹น ๋„์‹œ์ด๋ฆ„์ด ์—†๋Š”์ง€? (cache miss)

 

1๋ฒˆ๊ณผ ๊ฐ™๋‹ค๋ฉด cache hit์ด๋ฏ€๋กœ ์‹คํ–‰์‹œ๊ฐ„์ด 1์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌํ„ด๊ฐ’์— +1์„ ํ•ด์ฃผ๊ณ , ์นด์šดํŠธ ๋ฐฐ์—ด์€ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ด์ค€๋‹ค. ์ด ๋•Œ, ๋‹ค๋ฅธ ๋ฐฐ์—ด๋“ค์€ ํ•œ ํ„ด์„ ๋„๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์นด์šดํŠธ ๋ฐฐ์—ด์— +1์„ ํ•ด์ค€๋‹ค. ์ฐธ๊ณ ๋กœ ๋„์‹œ ์ด๋ฆ„์„ ๋น„๊ตํ•  ๋•Œ๋Š” equalsIgnoreCase()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†์ด ๋น„๊ตํ•˜๋„๋ก ํ•ด์ค€๋‹ค.

 

2๋ฒˆ๊ณผ ๊ฐ™๋‹ค๋ฉด cache miss์ด๋‹ค. ์นด์šดํŠธ ๋ฐฐ์—ด์„ ๋Œ๋ฉฐ ์ œ์ผ ํฐ ๊ฐ’(์ œ์ผ ์บ์‹œ์— ์˜ค๋ž˜ ๋จธ๋ฌด๋ฅธ ๊ฐ’)์„ ์ฐพ์•„๋‚ธ๋‹ค. ํ•ด๋‹น ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ•˜์—ฌ, ์บ์‹œ ๋ฐฐ์—ด์— ๋„์‹œ ์ด๋ฆ„์„ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ๊ณ , ์นด์šดํŠธ๋Š” 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ์‹คํ–‰์‹œ๊ฐ„์ด 5์ด๋ฏ€๋กœ ๋ฆฌํ„ด๊ฐ’์— +5๋ฅผ ํ•ด์ค€๋‹ค.

 

 

 

 

์ฝ”๋“œ

class Solution {
    public int solution(int cacheSize, String[] cities) {
        int answer = 0;

        if(cacheSize == 0) {
            return cities.length * 5;
        }

        int[] cnt = new int[cacheSize];
        String[] cache = new String[cacheSize];

        for(int i = 0; i < cities.length; i++) {

            String city = cities[i];
            boolean b = true;
            int val = -99999999;
            int idx = 0;

            for(int j = 0; j < cache.length; j++) {
                if(city.equalsIgnoreCase(cache[j])) {
                    cnt[j] = 0;
                    b = false;
                    answer += 1;
                } else {
                    cnt[j] += 1;
                }
            }


            if(b) {
                for(int j = 0; j < cnt.length; j++) {
                    if(val < cnt[j]) {
                        val = cnt[j];
                        idx = j;
                    }
                    cnt[j] += 1;
                }
                cache[idx] = city;
                cnt[idx] = 0;
                answer += 5;
            }

        }

        return answer;
    }
}