알고리즘 & 자료구조/정렬

37. Least Recently Used(카카오 캐시 문제 변형)

알못에서잘알까지 2020. 9. 12. 13:43

    37번 문제   

 

 

 



    내가 풀이한 답   

 앞에서 

#include <stdio.h>
#include <stdlib.h>

int main() {
	//freopen("input.txt", "rt", stdin);
	int n, m, i, a, j, idx, flag = -1;
	scanf("%d %d", &n, &m);
	
	int *arr = (int *)malloc(sizeof(int) * n);
	
	for(i=0; i<m; i++){
		scanf("%d", &a);
		flag = -1;
		for(j=0; j<n; j++){
			if(arr[j] == a) {
				idx = j;
				flag = 1;
			}
		}
		
		if(flag == 1){
			for(j=idx-1; j>=0; j--){
				arr[j+1] = arr[j];
			}
		}
		else {
			for(j=n-2; j>=0; j--){
				 arr[j+1] = arr[j];
			}
		}
		arr[0] = a;
	}
	
	for(i=0; i<n; i++){
		printf("%d ", arr[i]);
	}
    
    	free(arr);
	return 0;
}

 

 결과는 통과하였다.

 

 



    사이트의 답안   

#include <stdio.h>
int C[20];
int main() {
	freopen("input.txt", "rt", stdin);
	int s, n, a, i, j, pos;
	scanf("%d %d", &s, &n);
	for(i=1; i<=n; i++){
		scanf("%d", &a);
		pos=-1; 
		for(j=0; j<s; j++) if(C[j]==a) pos=j;
		if(pos==-1){
			for(j=s-1; j>=1; j--) C[j]=C[j-1];
		}
		else{
			for(j=pos; j>=1; j--) C[j]=C[j-1];
		}
		C[j]=a;
	}
	for(i=0; i<s; i++) printf("%d ", C[i]);
	return 0;
}