코드

import java.util.*;
//Least Recently Used
class LRU {	
	public static void main(String[] args){
		int[] arr = new Random().ints(20, 1, 11)
		            .toArray();
		int size = 5; //캐시 사이즈
		int[] cache = new int[size];
		
		System.out.println(Arrays.toString(arr));
		//전체 작업을 순회
		for(int i=0;i< arr.length;i++) {
			int tmpIndex = -1;
			int value = arr[i];
			//캐시에 이미 존재하는지
			for(int j=0;j<cache.length;j++) {
				if(cache[j] == value) {
					tmpIndex=j;
					break;
				}
			}
			//캐시에 존재할 경우 그 자리를 제외하고 뒤로 밀기
			int j = tmpIndex != -1 ? tmpIndex : cache.length-1;
			for(; 0<j;j--) {
				cache[j] = cache[j-1];
			}
			cache[0] = arr[i];
			System.out.println(Arrays.toString(cache)+"입력값 =" + arr[i]);
		}
	}
}

결과

[4, 2, 3, 8, 4, 9, 8, 5, 8, 10, 3, 10, 9, 7, 6, 5, 9, 3, 10, 8]
[4, 0, 0, 0, 0]입력값 =4
[2, 4, 0, 0, 0]입력값 =2
[3, 2, 4, 0, 0]입력값 =3
[8, 3, 2, 4, 0]입력값 =8
[4, 8, 3, 2, 0]입력값 =4
[9, 4, 8, 3, 2]입력값 =9
[8, 9, 4, 3, 2]입력값 =8
[5, 8, 9, 4, 3]입력값 =5
[8, 5, 9, 4, 3]입력값 =8
[10, 8, 5, 9, 4]입력값 =10
[3, 10, 8, 5, 9]입력값 =3
[10, 3, 8, 5, 9]입력값 =10
[9, 10, 3, 8, 5]입력값 =9
[7, 9, 10, 3, 8]입력값 =7
[6, 7, 9, 10, 3]입력값 =6
[5, 6, 7, 9, 10]입력값 =5
[9, 5, 6, 7, 10]입력값 =9
[3, 9, 5, 6, 7]입력값 =3
[10, 3, 9, 5, 6]입력값 =10
[8, 10, 3, 9, 5]입력값 =8

최근 사용한 데이터를 캐시에 저장하는 등의 수정이 자주 발생한다,  배열보단 LinkedList 같은 자료구조가 좋다.

'자료구조&알고리즘 > 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비' 카테고리의 다른 글

마구간 정하기  (0) 2022.12.17
장난꾸러기  (0) 2022.12.09
버블정렬  (0) 2022.12.04
삽입정렬  (0) 2022.12.03
선택정렬  (0) 2022.12.02

+ Recent posts