풀이
/**
* 캐시.js
* https://programmers.co.kr/learn/courses/30/lessons/17680?language=javascript
*/
const MISS = 5, HIT = 1; // 1
function solution(cacheSize, cities) {
if (cacheSize === 0) return MISS * cities.length; // 2
let answer = 0;
const cache = [];
cities
.map((city) => city.toLowerCase()) // 3
.forEach((city) => {
const cityIdx = cache.indexOf(city);
if (cityIdx > -1) {
answer += HIT; // 4
cache.splice(cityIdx, 1); // 5
} else {
answer += MISS; // 6
if (cache.length === cacheSize) cache.shift(); // 7
}
cache.push(city); // 8
});
return answer; // 9
}
- MISS와 HIT 했을 경우 더해지는 실행시간을 선언한다.
- cacheSize가 0일 경우를 예외처리해준다. 모든 경우가 MISS이므로 cities 길이만큼 MISS 처리해준다.
- 대소문자를 구분하지 않는다는 조건이 있으므로 모두 소문자로 변경해준다.
- cache에 indexOf를 통해 city 가 존재하는 것이 확인되면 HIT 실행시간만큼 answer에 더해준다.
- LRU 캐시 교체 알고리즘이므로 가장 최근에 접근한 내용이 cache 가장 뒤에 들어가므로 기존 cache에 존재하던 city를 splice로 삭제해준다.
- cache에 city가 존재하지 않으면 MISS 실행시간만큼 answer에 더해준다.
- cache가 가득차있을 경우 가장 오래된 맨 앞의 내용을 shift로 삭제해준다.
- 가장 최근에 접근한 city를 cache에 맨 뒤에 추가해준다.
- answer 를 반환하면 끝난다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][자바스크립트][Level1] 이상한 문자 만들기 (0) | 2022.02.25 |
---|---|
[프로그래머스][자바스크립트][Level2] 피보나치 수 (0) | 2022.02.25 |
[프로그래머스][자바스크립트][Level2][카카오] 괄호 변환 (0) | 2022.02.21 |
[프로그래머스][자바스크립트][Level2][카카오] 뉴스 클러스터링 (0) | 2022.02.20 |
[프로그래머스][자바스크립트][Level1][카카오] 신규 아이디 추천 (0) | 2022.02.19 |
댓글