<문제>
캐시의 사이즈와, 캐시 배열을 전달했을 때, 해야할 작업이없으면 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의 구동원리를 이해하고 나니, 왜 메모리관점에서 좋지 않다고 했는지 알 수 있었다. 메서드는 득이 될 수도 독이 될 수도 있겠다.
개념을 이해했다고 생각했는데, 설명할 수 없으면 모르는 것과 같다는 말을 되새기며.. 겸손하고, 공부 더 열심히 하자!
코드를 적으면서 설계를 하는 것은 공사를 먼저 시작하고 빌딩 디자인을 하는 것과 같다. 이러한 방식은 개 집 만들 때나 가능한 방식이다.
수연님과 이런 얘기를 나눴다. 코드를 일단 치고 보는 것이 아니라, 이제는 조급함을 내려놓고 시간을 충분히 들여 설계를 제대로 하자. 그리고 답만 빨리 찾으려고 하지말고, '어떻게' 찾아갈지에대해 고민하자. 문제를 잘 정의하는 것이 그 시작이다.