[Algorithm] _ Least Recently Used

이지·2021년 10월 17일
0

algorithm

목록 보기
5/10

<문제>
캐시의 사이즈와, 캐시 배열을 전달했을 때, 해야할 작업이없으면 miss로 하나씩 밀리게 되고 있으면 hit 로, 해당 작업이 맨앞으로 오면서 그 앞의 작업들은 뒤로 하나씩 밀리게 된다.

function solution(size, arr){
    //삽입정렬 응용문제    
    //모든 요소를 0으로 초기화 한다. 
    let answer=Array.from({length:size}, ()=>0);
    arr.forEach(x => {
        let pos=-1;
/*  indexOf method를 사용하여 해당 작업이 있는지 먼저 검증하는 수연님의 풀이.

let memory = Array.from({length:0},()=>{});
for (let x of works){
    //존재하는 지 확인
    let idx=memory.indexOf(x);
    if(idx=== -1){
    memory.pop();
    memory.unshift(x;)
    }
    else{
... 
    }

}

*/
   for(let i=0; i<size; i++) if(x===answer[i]) 		 		pos=i;
        if(pos===-1){            
        //answer.unshift(x);
        //if(answer.length>size) answer.pop            
            for(let i=size-1; i>=1; i--){
                answer[i]=answer[i-1];
            }
        }
        else{
        //answer.splice(pos,1)
        //answer.unshift(x);
            for(let i=pos; i>=1; i--){
                answer[i]=answer[i-1];
            }
        } 
        answer[0]=x;  
    });

    return answer;
}

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

아직도 아리송~ 한 삽입정렬문제. 막상 설명을 하려고 하니 머리가 멍해지고 당황하다보니 더 안읽히고.. 충분한 시간을 들여서 각각 알고리즘의 원리를 깊이 이해하는 시간을 가져야 겠다. 완전히 체화하려면 절대적인 시간이 필요할 것같다. 학습시간을 늘리자! 버벅대서 너무 부끄러웠던 ㅠㅠ..공부하지 않았던 것을 더 부끄러워 하자..

별 고민없이 썼던 shift와 unshift의 구동원리를 이해하고 나니, 왜 메모리관점에서 좋지 않다고 했는지 알 수 있었다. 메서드는 득이 될 수도 독이 될 수도 있겠다.

개념을 이해했다고 생각했는데, 설명할 수 없으면 모르는 것과 같다는 말을 되새기며.. 겸손하고, 공부 더 열심히 하자!

 코드를 적으면서 설계를 하는 것은 공사를 먼저 시작하고 빌딩 디자인을 하는 것과 같다. 이러한 방식은 개 집 만들 때나 가능한 방식이다.

수연님과 이런 얘기를 나눴다. 코드를 일단 치고 보는 것이 아니라, 이제는 조급함을 내려놓고 시간을 충분히 들여 설계를 제대로 하자. 그리고 답만 빨리 찾으려고 하지말고, '어떻게' 찾아갈지에대해 고민하자. 문제를 잘 정의하는 것이 그 시작이다.

profile
이지피지레몬스퀴지🍋

0개의 댓글

관련 채용 정보