출처: 제주코딩베이스켐프 자바스크립트 알고리즘 93번문제 -
내가 푼 답
const incomingPages = 'B C B A E B C E'.split(' ');
const memory = [];
const frame = 3;
let oldIndex = 0;
let time = 0;
while(incomingPages.length > 0) {
if(oldIndex === frame) {
oldIndex = oldIndex - frame;
}
const incomingPage = incomingPages.shift();
if(!memory.includes(incomingPage)) {
memory.splice(oldIndex, 1, incomingPage)
oldIndex = oldIndex + 1;
console.log('miss!!')
time = time + 6;
} else {
console.log('hit!!')
time = time + 1;
}
}
console.log(time, '실행시간')
선입선출 은 맨 처음에 들어온 것을 바로 빼는 것이다. (군대, 미소지기 할떄 안하면 혼나는거..ㅠㅠ)
근데 위와 같이 메모리 위치는 변하지않고 일찍들어온 순서대로 바꿔주는 식으로 하려면 memory에 순서대로 넣고,
가득차게 되면 0번부터 2번까지 차례 대로 바꿔주면 된다고 생각했다
0번 부터 2번까지 차례를 정해주는 것을, oldIndex
로 정하고, oldIndex가 메모리의 크기만큼 되게 되면 그 크기만큼 뺴서 다시 0으로 만들었다.