
-Code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ9184 {
// 메모이제이션을 위한 dp 배열 선언
static int[][][] dp = new int[51][51][51];
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
// 반복문 시작
while (true) {
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
// 탈출 조건
if (a == -1 && b == -1 && c == -1) {
break;
}
// 출력
System.out.println(String.format(
"w(%d, %d, %d) = %d", a, b, c, recursion(a, b, c))
);
}
}
// 문제에서 주어진 조건
private static int recursion(int a, int b, int c) {
if (a <= 0 || b <= 0 || c <= 0) {
return 1;
}
if (dp[a][b][c] != 0) {
return dp[a][b][c];
} else if (a > 20 || b > 20 || c > 20) {
return dp[a][b][c] = recursion(20, 20, 20);
} else if (a < b && b < c) {
return dp[a][b][c] =
recursion(a, b, c-1) +
recursion(a, b-1, c-1) -
recursion(a, b-1, c);
} else {
return dp[a][b][c] =
recursion(a-1, b, c) +
recursion(a-1, b-1, c) +
recursion(a-1, b, c-1) -
recursion(a-1, b-1, c-1);
}
}
}'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 11729번 하노이 탑 이동 순서 (0) | 2025.12.30 |
|---|---|
| [백준/Java] 30009번 포지션 제로 (0) | 2025.12.30 |
| [백준/Java] 14889번 스타트와 링크 (0) | 2025.12.29 |
| [백준/Java] 1406번 에디터 (0) | 2025.12.29 |
| [백준/Java] 15649번 N과 M (1) (0) | 2025.12.29 |