πŸ“š Language & CS knowledge/Algorithm (κΈ°μ΄ˆλ¬Έμ œν’€μ΄)

카카였 μΊμ‹œ 문제 λ³€ν˜•(μ‚½μž… μ •λ ¬ μ‘μš©)

Daehyunii 2022. 9. 6. 19:02

문제(좜처 : μΈν”„λŸ° μžλ°”μŠ€ν¬λ¦½νŠΈ μ•Œκ³ λ¦¬μ¦˜ λ¬Έμ œν’€μ΄ κ°•μ˜, μ •λ³΄μ˜¬λ¦Όν”Όμ•„λ“œ)

μΊμ‹œλ©”λͺ¨λ¦¬λŠ” CPU와 μ£ΌκΈ°μ–΅μž₯치(DRAM) μ‚¬μ΄μ˜ κ³ μ†μ˜ μž„μ‹œ λ©”λͺ¨λ¦¬λ‘œμ„œ CPUκ°€ μ²˜λ¦¬ν•  μž‘μ—… 을 μ €μž₯ν•΄ λ†“μ•˜λ‹€κ°€ ν•„μš”ν•  λ°”λ‘œ μ‚¬μš©ν•΄μ„œ μ²˜λ¦¬μ†λ„λ₯Ό λ†’μ΄λŠ” μž₯μΉ˜μ΄λ‹€. μ›Œλ‚™ λΉ„μ‹Έκ³  μš©λŸ‰μ΄ μž‘μ•„ 효율적으둜 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. 철수의 μ»΄ν“¨ν„°λŠ” μΊμ‹œλ©”λͺ¨λ¦¬ μ‚¬μš© κ·œμΉ™μ΄ LRU μ•Œκ³ λ¦¬μ¦˜μ„ λ”° λ₯Έλ‹€. 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κ°€ 되고, 63번 μ•žμ— μžˆλŠ” 5, 2번 μž‘μ—…μ€ ν•œ μΉΈ λ’€λ‘œ 밀리고, 3번이 맨 μ•žμœΌ

둜 μœ„μΉ˜ν•˜κ²Œ λœλ‹€. 5 2 3 1 6 ---> 3 5 2 1 6

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

 

β–£ μž…λ ₯μ„€λͺ…
첫 번째 쀄에 μΊμ‹œμ˜ 크기인 S(3<=S<=10)와 μž‘μ—…μ˜ 개수 N(5<=N<=1,000)이 μž…λ ₯λœλ‹€. 두 번째 쀄에 N개의 μž‘μ—…λ²ˆν˜Έκ°€ 처리순으둜 μ£Όμ–΄μ§„λ‹€. μž‘μ—…λ²ˆν˜ΈλŠ” 1 ~100 이닀.

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

 

β–£ μž…λ ₯예제 1

5 9

1 2 3 2 6 2 3 5 7

 

β–£ 좜λ ₯예제 1

7 5 3 2 6

 

[μΊμ‹œ λ©”λͺ¨λ¦¬ μƒνƒœ λ³€ν™”]

10000

21000

32100

23100

62310

26310

32610

53261

75326

 

Tip

 

λ¬Έμ œν’€μ΄

//κ°•μ˜ λ“£κ³  λ‚΄κ°€ λ‹€μ‹œ μž‘μ„±ν•œ λ‹΅
function solution(cacheSize, arr){
    let cacheMemory = Array.from({length : cacheSize}, (v)=>0);

    arr.forEach(element =>{
        let pos = -1;
        for(let i = 0 ; i < cacheSize ; i++){
            if(cacheMemory[i] === element) pos = i;
        }
        if(pos === -1){
            for(let i = cacheMemory.length - 1 ; i >= 1 ; i--){
                cacheMemory[i] = cacheMemory[i-1];
            }
        }else{
            for(let i = pos ; i >= 1 ; i--){
                cacheMemory[i] = cacheMemory[i-1];
            }
        }
        cacheMemory[0] = element;
    })
    return cacheMemory;
}

let arr3=[1, 2, 3, 2, 6, 2, 3, 5, 7, 1];
console.log(solution(5, arr3));