🍧 μ½”λ”©ν…ŒμŠ€νŠΈ

[μΈν”„λŸ° C++] 37. Least Recently Used (카카였 μΊμ‹œ 문제 λ³€ν˜•)

peewoong 2024. 5. 2. 18:43

🍧 문제

LRU μ•Œκ³ λ¦¬μ¦˜ : Least Recently Used. κ°€μž₯ μ΅œκ·Όμ— μ‚¬μš©λ˜μ§€ μ•Šμ€ 것. μΊμ‹œμ—μ„œ μž‘μ—…μ„ μ œκ±°ν•  λ•Œ κ°€μž₯ μ˜€λž«λ™μ•ˆ μ‚¬μš©ν•˜μ§€ μ•Šμ€ 것을 μ œκ±°ν•˜κ² λ‹€λŠ” μ•Œκ³ λ¦¬μ¦˜. 

λ§Œμ•½ μΊμ‹œμ˜ μ‚¬μ΄μ¦ˆκ°€ 5이고, μž‘μ—…μ΄ 2 3 1 6 7 순으둜 μ €μž₯λ˜μ–΄ μžˆλ‹€λ©΄(맨 μ•žμ΄ κ°€μž₯ μ΅œκ·Όμ— 쓰인 μž‘μ—…μ΄κ³ , 맨 λ’€λŠ” κ°€μž₯ μ˜€λž«λ™μ•ˆ 쓰이지 μ•Šμ€ μž‘μ—…)

 

1. cache miss : ν•΄μ•Όν•  μž‘μ—…μ΄ μΊμ‹œμ— μ—†λŠ” μƒνƒœ. μœ„μƒνƒœμ—μ„œ λ§Œμ•½ μƒˆλ‘œμš΄ μž‘μ—…μΈ 5번 μž‘μ—…μ„ cpuκ°€ μ‚¬μš©ν•œλ‹€λ©΄ cache missκ°€ 되고, λͺ¨λ“  μž‘μ—…μ΄ λ’€λ‘œ 밀리고 5번 μž‘μ—…μ€ μΊμ‹œμ˜ 맨 μ•žμ— μœ„μΉ˜ν•œλ‹€. 5 2 3 1 6 (7번 μž‘μ—…μ€ μΊμ‹œμ—μ„œ μ‚­μ œλœλ‹€)

 

2. cache hit : ν•΄μ•Όν•  μž‘μ—…μ΄ μΊμ‹œμ— μžˆλŠ” μƒνƒœλ‘œ μœ„ μƒνƒœμ—μ„œ λ§Œμ•½ 3번 μž‘μ—…μ„ cpuκ°€ μ‚¬μš©ν•œλ‹€λ©΄, cache hitκ°€ 되고, 3번 μ•žμ— μžˆλŠ” 5, 2번 μž‘μ—…μ€ ν•œ μΉΈ λ’€λ‘œ 밀리고, 3번이 맨 μ•žμœΌλ‘œ μœ„μΉ˜ν•˜κ²Œ λœλ‹€. 5 2 3 1 6 πŸ‘‰ 3 5 2 1 6

 

μΊμ‹œμ˜ 크기가 μ£Όμ–΄μ§€κ³ , μΊμ‹œκ°€ λΉ„μ–΄μžˆλŠ” μƒνƒœμ—μ„œ n개의 μž‘μ—…μ„ cpuκ°€ μ°¨λ‘€λ‘œ μ²˜λ¦¬ν•œλ‹€λ©΄ n개의 μž‘μ—…μ„ μ²˜λ¦¬ν•œ ν›„ μΊμ‹œ λ©”λͺ¨λ¦¬μ˜ μƒνƒœλ₯Ό κ°€μž₯ 졜근 μ‚¬μš©λœ μž‘μ—…λΆ€ν„° μ°¨λ‘€λŒ€λ‘œ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ„Έμš”.

 

🍧 μž…λ ₯

첫 번째 쀄에 μΊμ‹œμ˜ 크기인 S(3~10)와 μž‘μ—…μ˜ 개수 N(5~1000)이 μž…λ ₯λœλ‹€.

두 번째 쀄에 N개의 μž‘μ—…λ²ˆν˜Έκ°€ 처리순으둜 μ£Όμ–΄μ§„λ‹€. μž‘μ—…λ²ˆν˜ΈλŠ” 1~100 이닀.

 

🍧 좜λ ₯

λ§ˆμ§€λ§‰ μž‘μ—… ν›„ μΊμ‹œ λ©”λͺ¨λ¦¬μ˜ μƒνƒœλ₯Ό κ°€μž₯ 졜근 μ‚¬μš©λœ μž‘μ—…λΆ€ν„° μ°¨λ‘€λ‘œ 좜λ ₯ν•©λ‹ˆλ‹€.

μΊμ‹œλ©”λͺ¨λ¦¬κ°€ λΉ„μ–΄ μžˆλŠ” 뢀뢄은 0으둜 좜λ ₯ν•©λ‹ˆλ‹€.

 

 

🍧 1트 (κ°•μ˜ 풀이)

μ‚½μž…μ •λ ¬ ν™œμš©. μ„ μƒλ‹˜μ€ μ–΄λ–»κ²Œ 이런 생각을 ν•˜μ…¨μ„κΉŒ..! λ‚˜λŠ” a[0]μ—λ§Œ μ§‘μ€‘ν–ˆλŠ”λ°.. πŸ˜‚

#include <iostream>
#include <vector>
#include<algorithm>
using namespace std;

int main(void){
	freopen("input.txt", "rt", stdin);
	
	int s, n, a, pos, i, j;
	cin >> s >> n;
	int c[s];
	
	for(i = 1; i <= n; ++i){
		cin >> 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[0] = a;
	}
	
	for(int i = 0; i < s; ++i){
		cout << c[i] << ' ';
	}
	
	return 0;
}

 

μ•„λ‹™λ‹ˆλ‹€. 흑흑