์ฝ”๋”ฉํ…Œ์ŠคํŠธ

[์ธํ”„๋Ÿฐ_์ •๋ ฌ] 4. Least Recently Used

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 1. 18. 09:00

<<ํ’€์ด>>

 

-๋‚˜์˜ ํ’€์ด-

 

์‹œ๊ฐ„ ๋ณต์žก๋„ : O(N^3)

 

์ด ๋ฌธ์ œ๋ฅผ ํ‘ผ ํ•ต์‹ฌ์€ ์„ธ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

1. ์šฐ์„ , ์–ด๋– ํ•œ ๊ทœ์น™์ด ์ž‘๋™ํ•˜๋Š”์ง€๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ๊ทธ ์›๋ฆฌ ๋Œ€๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค.(์‚ฌ์šฉํ–ˆ๋˜ ๊ฒƒ์„ ์žฌ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๊ทธ๊ฒƒ์€ ํžˆํŠธ์ด๊ณ  ์›๋ž˜ ๊ทธ๊ฐ’์˜ ์œ„์น˜์—์„œ ๋ถ€ํ„ฐ ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ  ๊ฐ’์„  ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค. ๋งŒ์•ฝ ๊ฐ™์€ ๊ฒƒ์ด ์—†๊ณ  ์ƒˆ๋กœ์šด ๊ฐ’์ด ๋“ค์–ด์˜ค๊ฒŒ ๋˜๋ฉด ๋งจ ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ๊ฐ’์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค. ), ์ด์ „ ๋ถ€ํ„ฐ ์‚ฌ์šฉํ•˜๋˜ tmp๋ฅผ ์ž„์‹œ์ ์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

2. ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ํฐ ๋งŒํผ ์–ด๋А ์ƒํ™ฉ์—์„œ break๋ฅผ ๊ฑธ์–ด์คฌ๋‹ค.

 

3. boolean run์„ ์‚ฌ์šฉํ•ด์„œ ํ•„์š”ํ•  ๋•Œ๋งŒ ์ฝ”๋“œ๊ฐ€ ๋Œ์•„๊ฐ€๊ฒŒ ์„ค์ •ํ–ˆ๋‹ค.

 

 

import java.util.Scanner;

class Main {
    private int[] solution(int n, int[] arr) {
        int[] brr = new int[n];
        int tmp = 0;

        for(int i = 0; i < arr.length; i++) {
            tmp = arr[i];
            boolean run = true;
            for (int j = 0; j < brr.length; j++) {
                if (brr[j] == tmp) {
                    for (int k = j - 1; k >= 0; k--) {
                        brr[k + 1] = brr[k];
                    }
                    brr[0] = tmp;
                    run = false;
                    break;
                }
            }
            if (run) {
                for (int z = brr.length - 1; z >= 1; z--) {
                    brr[z] = brr[z - 1];
                }
                brr[0] = tmp;

            }
        }
        return brr;
    }


    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        int[] arr = new int[m];
        for(int i = 0; i < m; i++) {
            arr[i] = in.nextInt();
        }
        for(int x : T.solution(n, arr)) System.out.print(x + " ");
    }
}

 

-๊ฐ•์‚ฌ๋‹˜ ํ’€์ด-

 

import java.util.Scanner;

class Main {
    private int[] solution(int size, int n, int[] arr) {
       int[] cache = new int[size];
       for(int x : arr) {
           int pos = -1;
           for(int i = 0; i < size; i++) if(x == cache[i]) pos = i;
           if(pos == -1) {
               for(int i = size - 1; i >= i; i--) {
                   cache[i] = cache[i - 1];
               }
               cache[0] = x;
           } else {
               for(int i = pos; i >= 1; i--) {
                   cache[i] = cache[i - 1];
               }
               cache[0] = x;
           }
       }
       return cache;
    }


    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int s = in.nextInt();
        int n = in.nextInt();
        int[] arr = new int[n];
        for(int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
        }
        for(int x : T.solution(s, n, arr)) System.out.print(x + " ");
    }
}

 

๋‚˜๋ž‘ ์ „์ฒด์ ์ธ ํ’€์ด ๋ฐฉ์‹์€ ๊ฐ™์ง€๋งŒ ๊ฐ•์‚ฌ๋‹˜์€ if else ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ–ˆ๋‹ค.

 

ํฐ ์ฐจ์ด๋Š” ์—†์ง€๋งŒ ๋˜ ๋‹ค๋ฅธ ํ’€์ด ๋ฐฉ์‹์„ ๋ณด๋ฉฐ ์˜ค๋Š˜๋„ ๋ฐฐ์›Œ๊ฐ„๋‹ค ~~!!