728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/17680#
문제 풀이 방법
- LRU알고리즘은 오래된 캐시를 밀어내며 새로운 캐시를 받는 방식이다.
hit를 하게되면 hit한 요소를 cache의 가장 마지막(tail)에 위치해야한다.
(추가적인 설명: https://dailylifeofdeveloper.tistory.com/355) - 그렇다면 이 문제는 cache라는 배열을 만들고 LRU를 구현할 수 있게 해준다.
코드
function solution(cacheSize, cities) {
let cache = [];
let runtime = 0;
let smallCities = cities.map(e => e.toLowerCase())
// 캐시의 크기가 0이면 들어가서 hit할 수 있는 경우가 없어지기에 miss가 나는 경우
if(cacheSize === 0){
return cities.length * 5;
}
smallCities.forEach((e, i) => {
const idx = cache.indexOf(e);
// 있는 경우
if(cache.length && cache.includes(e)){
runtime += 1;
cache.splice(idx,1)
cache.push(e);
}
// 없는 경우
else{
if(cache.length < cacheSize){
cache.push(e);
}
else{
cache.shift();
cache.push(e)
}
runtime += 5;
}
// console.log(e, cache, runtime)
})
return runtime;
}
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
[JS] 2Level / 연습문제 / 할인 행사 (0) | 2023.08.22 |
---|---|
[JS] 1Level / 연습문제 / 푸드 파이트 대회 (0) | 2023.08.17 |
[JS] 3Level / 탐욕법 / 단속카메라 (0) | 2023.07.18 |
[JS] 2Level / 연습문제 / 행렬의 곱셈 (0) | 2023.07.10 |
[JS] 2Level / 2019 KAKAO BLIND RECRUITMENT / 오픈체팅방 (0) | 2023.06.30 |