Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 28 | 29 | 30 |
Tags
- 백준
- 최대 길이
- 연속부분수열
- java
- 10992
- 등수구하기
- 10991
- 알고리즘
- 보이는 학생
- 공통원소 구하기
- 두 배열 합치기
- Two Pointer
- 격자판
- 투 포인터
- 인프런
- 모든행과열대각선의합
- 코테준비
- 아스키코드
- 점수계산
- array
- GitHub #Commit #BaekJoon
- 가장 짧은 문자거리
- 큰 수 출력하기
- 자바
- 뒤집은 소수
- 누적 계산
- 임시반장 정하기
- Pointer
- 배열
- ArrayList
Archives
- Today
- Total
ezhoon
[인프런] 08_07 조합수(메모이제이션) 본문
📖 문제
- 아래의 공식을 사용하고 재귀를 이용해 조합의 수를 구해주는 프로그램을 작성하세요

- 첫째 줄에 자연수 n(3<=n<=33)과 r(0<=r<=n)이 입력됩니다.
- 첫째 줄에 조합수를 출력합니다.

⚠️ 주의사항
- 위의 공식을 이용할 것
- 시간초과에 주의
✍️ 이해
/**
* 1. 조합수를 구하는 공식
* 2. 입력 값 받아오기
* 3. 2차원 배열에 공식의 값 저장하기
* 4. DFS 반복 중 배열의 값이 0보다 크면 return 배열
* 5. N과 R이 같거나 R이 0이면 return 1;
*/
✏️ 풀이
import java.util.Scanner;
public class Main {
static int N, R;
static int[][] answer = new int[40][40];
public int DFS(int N, int R) {
if(answer[N][R] > 0) return answer[N][R];
if(N == R || R == 0) return 1;
else return answer[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);
N = sc.nextInt();
R = sc.nextInt();
System.out.println(T.DFS(N, R));
}
}
'[Java] 인프런 문제풀이 > DFS, BFS 활용' 카테고리의 다른 글
인프런 08_08 수열 추측하기 (0) | 2022.02.22 |
---|---|
[인프런] 08_06 순열 구하기(DFS) (0) | 2022.02.21 |
[인프런] 08_05 동전교환 (DFS) (0) | 2022.02.20 |
[인프런] 08_04 중복순열 구하기(DFS) (0) | 2022.02.19 |
[인프런] 08_03 동전교환(DFS) (0) | 2022.02.19 |