memoization이란, (순수)함수를통해 반환된 연산값을 기억해뒀다가 불필요한 재연산을 막아 성능을
개선하는 방법이다. 리액트에서 리렌더링을 막을 때, usecallback과 usememo를 활용하는 것도
이것의 일종이라고 볼 수 있다.
function solution(n, r){
let answer=[];
// 이차원 배열을 생성 후, 0으로 초기값을 세팅한다.
let dy= Array.from(Array(35), () => Array(35).fill(0));
function DFS(n, r){
// 값이 들어있으면, 값을 반환.
if(dy[n][r]>0) return dy[n][r];
//nCr || nC0 === 1 을 반환
if(n===r || r===0) return 1;
//그 외의 경우에는 가지치기, nCr = n-1Cr-1 + n-1Cr..
// 연산과 동시에 값을 할당.
else return dy[n][r]=DFS(n-1, r-1)+DFS(n-1, r);
}
answer=DFS(n, r);
return answer;
}
console.log(solution(5, 3));