Coding Test Java

조합구하기 (DFS, 메모이제이션)

seonggu 2024. 2. 5. 20:53
import java.util.*;

// 조합의 경우수 (메모이제이션)
// 5C3 = 4C2 + 4C3
// r==0, n==r -> 1 break
// 2C1같은 값이 한번 더 나오면  배열(dy)에서 메모이제이션한 값 가져오기 
class Main{
    int[][] dy = new int[35][35]; //배열에 저장하기 메모이제이션
	
    public int DFS(int n, int r){
        if(dy[n][r] > 0) return dy[n][r]; //메모이제이션 값 리턴
        if(n==r || r==0)return 1;
        else {
            return dy[n][r] = DFS(n-1, r-1)+DFS(n-1, r); // DFS 재귀값에 저장하기
        }
        
    }
    
    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        int r = kb.nextInt();
        System.out.println(T.DFS(n, r));
	}
}