이 알고리즘 문제는 인프런의 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 (김태원)의 문제입니다.
문제 설명
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class sec06_04 {
public static int[] solution(int S, int[] arr) {
int[] cache = new int[S];
for (int i : arr)
{
int pos = -1;
for(int j = 0; j < cache.length; ++j) if(cache[j] == i) pos = j; //캐시 히트인지 미스인지 탐색
if(pos == -1) //Cache Miss
{
for(int j = cache.length - 1; j > 0; --j) cache[j] = cache[j - 1]; //모든 작업을 한 칸씩 당긴다.
}
else //Chche Hit
{
for(int j = pos; j > 0; --j) cache[j] = cache[j - 1]; //pos 부터 맨 앞까지 작업을 한 칸씩 당긴다.
}
cache[0] = i; //새로운 작업을 맨 앞에 삽입
}
return cache;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int S = Integer.parseInt(st.nextToken());
int N = Integer.parseInt(st.nextToken());
int[] arr = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < arr.length; ++i) arr[i] = Integer.parseInt(st.nextToken());
for (int i : solution(S, arr)) System.out.print(i + " ");
}
}
설명
- 캐시 히트/미스 확인
-arr의 각 작업을 순서대로 탐색하여, 해당 작업이 캐시 내에 있는지(히트) 없는지(미스)를 확인한다.
-이를 위해 캐시 배열을 탐색하고, 작업이 캐시에 있으면 그 인덱스를 pos에 저장한다. 만약 캐시에 없으면 pos는 -1이 된다. - 캐시 미스 처리
-만약 해당 작업이 캐시에 없으면(미스), 캐시 내 모든 항목을 한 칸씩 뒤로 밀어낸 후, 새로운 작업을 캐시의 맨 앞에 삽입한다. - 캐시 히트 처리
-작업이 이미 캐시에 있을 경우(히트), 그 작업을 캐시의 맨 앞으로 이동시키기 위해 해당 위치에서부터 앞으로 한 칸씩 당겨온다.
'자료구조 & 알고리즘 > Inflearn' 카테고리의 다른 글
[인프런 알고리즘] Chapter 6, 6번 문제(장난꾸러기) (0) | 2024.08.20 |
---|---|
[인프런 알고리즘] Chapter 6, 5번 문제(중복 확인) (0) | 2024.08.18 |
[인프런 알고리즘] Chapter 6, 3번 문제(삽입 정렬) (0) | 2024.08.16 |
[인프런 알고리즘] Chpater 6, 2번 문제 (버블 정렬) (0) | 2024.08.15 |
[인프런 알고리즘] Chpater 6, 1번 문제(선택 정렬) (0) | 2024.08.15 |