코딩테스트 문제풀이/inflearn

[인프런] Node.js / 섹션7-정렬과 그리디, 결정알고리즘 / 5. Least Recently Used(카카오 캐시 문제 변형)

sangchu 2023. 2. 15. 15:51

문제

 

풀이

function solution(size, arr) {
  const cach = [];

  for (let i = 0; i < arr.length; i++) {
    if (cach.includes(arr[i])) {
      cach.unshift(arr[i]);
      cach.splice(cach.indexOf(arr[i]), 1);
    } else {
      if (cach.length > size - 1) cach.pop();
      cach.unshift(arr[i]);
    }
  }
  return cach;
}

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

현재 작업을 캐시배열의 맨 앞에 두고 뒷 숫자들은 한 칸씩 밀려나도록 한다. 

만약 캐시배열에 있었던 작업이라면 캐시배열에서 해당 작업의 인덱스 값을 지우고 맨 앞에 둔다. 

캐시배열에 없었던 작업이고 캐시배열이 꽉 차있는 상황이라면 맨 뒤의 값을 삭제하고 진행한다.