
- 문제분석
주어진 함수의 결과를 캐시에 저장하고, 같은 입력에 대해서는 다시 계산하지 않고 저장된 결과를 반환하도록 하는 것이다.
- 알고리즘 설계
- 캐시 저장소 만들기
- 함수 호출횟수 추적
- 함수의 입력을 문자열로 변환
fn이 호출될대마다 캐시에서 결과를 찾아 있으면 반환
없으면 실제 함수를 호출하고 결과를 캐시에 저장한다.
- 구현
/**
* @param {Function} fn
* @return {Function}
*/
function memoize(fn) {
const cache = new Map();
return function(...args) {
const key = args.toString();
if (cache.has(key)) {
return cache.get(key);
} else {
const result = fn (...args);
cache.set(key, result);
return result
}
}
}
/**
* let callCount = 0;
* const memoizedFn = memoize(function (a, b) {
* callCount += 1;
* return a + b;
* })
* memoizedFn(2, 3) // 5
* memoizedFn(2, 3) // 5
* console.log(callCount) // 1
*/

'알고리즘' 카테고리의 다른 글
[알고리즘] Linked List 이란 (0) | 2024.11.10 |
---|---|
[알고리즘] 배열중간삽입 - Linked List를 알기위한 사전단계 (0) | 2024.11.10 |
[알고리즘] 피보나치 수열 - dp를 알기위한 사전단계 (3) | 2024.11.09 |
[알고리즘] Hash (해쉬)이란 (0) | 2024.02.12 |
[알고리즘] Greedy Algorithm (탐욕알고리즘) 이란 (1) | 2024.02.12 |