1️⃣서론
프로그래머스 level2 문제 [1차] 캐시
입니다.
Javascript
를 이용하여 해결하였습니다.
2️⃣문제 설명
3️⃣풀이
이 문제는 LRU 알고리즘을 알고 있다면 좀더 쉽게 접근이 가능했던 문제가 아닌가 싶습니다.
캐시가 있다면 우리는 캐시 안에 내가 찾고자 하는 도시가 있다면 이것을 cache hit
라고 하고, 없다면
이것을 cache miss
라고 합니다. 이cache hit
와 cache miss
를 잘 구현하는 것이 이문제의 핵심이었던 것 같습니다.
풀이는 다음과 같습니다.
4️⃣ 내가 푼 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const solution = (cacheSize, cities) => {
let answer = 0;
let arr = [];
//1. 도시를 모두 대문자로 통일한다.
cities = cities.map((it) => it.toUpperCase());
//2. 캐시사이즈가 0이면 모든게 cache miss 이므로 *5로 리턴한다.
if (cacheSize == 0) return cities.length * 5;
//3. 배열을 순회하며 cache hit이면 배열의 맨뒤로 푸시하고
// cache miss일때는 (배열이 꽉찼다면 맨앞을 제거하고) 배열의 맨뒤로 푸시한다.
for (let i = 0; i < cities.length; i++) {
const idx = arr.findIndex((it) => it === cities[i]);
if (idx !== -1) {
arr.splice(idx, 1);
answer += 1;
} else if (arr.length === cacheSize) {
answer += 5;
arr.shift();
} else {
answer += 5;
}
arr.push(cities[i]);
}
return answer;
};
5️⃣ 결론
LRU 알고리즘을 잘 기억하고 기회가 되면 캐시에 대해서 알아보면 좋을 것 같습니다.
6️⃣ 마치며..
질문과 지적은 환영합니다. 이 문제는 최적의 정답일 수도 아닐수도 있습니다.
궁금한게 있으시면 아래 댓글 남겨주세요.🙏
댓글은 저에게 큰 힘이 됩니다!
감사합니다. ❤️