Notice
Recent Posts
Recent Comments
Link
개발 공부~
[메모이제이션] 조합의 경우의 수 본문
설명
로 계산합니다.
하지만 여러분은 이 공식을 쓰지않고 다음 공식을 사용하여 재귀를 이용해 조합수를 구해주는 프로그램을 작성하세요.
입력
첫째 줄에 자연수 n(3<=n<=33)과 r(0<=r<=n)이 입력됩니다.
출력
첫째 줄에 조합수를 출력합니다.
예시 입력 1
5 3
예시 출력 1
10
예시 입력 2
33 19
예시 출력 2
818809200
내 풀이
간단한 계산만 하기 때문에 n값이 커지면 실행에 시간이 걸린다
import java.util.Scanner;
public class Main {
public static int dfs(int n, int r ) {
if(n==r || r ==0) return 1;
else return dfs(n-1,r-1) + dfs(n-1,r);
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int r = sc.nextInt();
System.out.print(dfs(n,r));
}
}
다른 풀이 - 메모이제이션
구한 값을 메모이제이션하여
즉, 이차원배열에 값을 저장해서 값이 있으면 바로 리턴받아 계산
import java.util.Scanner;
public class Main {
static int[][] dy =new int[34][34];//n최대 33
public static 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);
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int r = sc.nextInt();
System.out.print(dfs(n,r));
}
}
'코딩테스트 > 기타' 카테고리의 다른 글
[DFS] 조합 구하기 .java (0) | 2024.11.16 |
---|---|
[DFS, 메모이제이션] 수열 추측하기 (3) | 2024.11.16 |
[DFS] 순열 구하기 .java (1) | 2024.11.15 |
[DFS] 동전교환 .java (3) | 2024.11.15 |
[DFS] 중복순열 구하기 .java (1) | 2024.11.15 |