문제 🔽
https://school.programmers.co.kr/learn/courses/30/lessons/17680
다른사람 풀이 🔽
function solution(cacheSize, cities) {
const MISS = 5, HIT = 1;
if (cacheSize === 0) return MISS * cities.length;
let answer = 0,
cache = [];
cities.forEach(city => {
city = city.toUpperCase();
let idx = cache.indexOf(city);
if (idx > -1) {
cache.splice(idx, 1);
answer += HIT;
} else {
if (cache.length >= cacheSize) cache.shift();
answer += MISS;
}
cache.push(city);
});
return answer;
}
내풀이🔽
1. 성공 ⭕
function solution(cacheSize, cities) {
let answer = 0;
let cache = []
// ex) ["newyork", "korea" ... ]
cities.map((city)=> city.toLowerCase()).forEach((city)=>{
// 캐시에 저장 되어 있다면
if(cache.includes(city)){
// 실행시간
answer+=1;
// stack 조정
// 해당 city 뺀다
cache = cache.filter((t)=> t!==city)
// 맨앞으로 city 너어준다
cache.unshift(city);
}else{
// 실행시간
answer+=5;
// stack 조정
// 맨앞으로 city 너어준다.
cache.unshift(city);
}
cache=cache.filter((val,index) => index<=cacheSize-1)
})
return answer;
}
느낀점🔽
처음에 캐시교체 알고리즘에 대한 배경 지식이 없어서 엄청 애먹었다.
LRU(Least Recently Used) 대한 개념을 찾아보고 cache hit 와 cache miss에 대해 알 수 있었다.
해당 개념에 대한 이해를 하고 난뒤 알고리즘은 쉽게 짤 수 있었다.
'Javascript' 카테고리의 다른 글
프로그래머스 코딩테스트 풀이(js) > 문자열 내 마음대로 정렬하(lv1) (0) | 2023.08.01 |
---|---|
프로그래머스 코딩테스트 풀이(js) > 모음사전(lv2) (0) | 2023.07.31 |
프로그래머스 코딩테스트 풀이(js) > 최소직사각형(lv1) (0) | 2023.07.29 |
프로그래머스 코딩테스트 풀이(js) > k번째수 (lv1) (0) | 2023.07.27 |
프로그래머스 코딩테스트 풀이(js) > 약수의 개수와 덧셈(lv1) (0) | 2023.07.26 |