728x90
신나는 함수 실행
https://www.acmicpc.net/problem/9184
9184번: 신나는 함수 실행
입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다.
www.acmicpc.net
풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.stream.IntStream;
public class Main {
private static long[][][] dp = new long[21][21][21];
private static StringBuilder sb = new StringBuilder();
static {
IntStream.range(0,21).forEach(i -> {
IntStream.range(0,21).forEach(j -> {
IntStream.range(0,21).forEach(k -> {
dp[i][j][k]=1L;
});
});
});
IntStream.range(0,21).forEach(i -> {
IntStream.range(0,21).forEach(j -> {
IntStream.range(0,21).forEach(k -> {
setDp(i,j,k);
});
});
});
}
private static void setDp(int a, int b, int c) {
if(a == 0 || b == 0 || c == 0){
dp[a][b][c]=1;
return;
}
if (a > 20 || b > 20 || c > 20) {
dp[a][b][c] = dp[20][20][20];
return;
}
if (a < b && b < c) {
dp[a][b][c] = dp[a][b][c - 1] + dp[a][b - 1][c - 1] - dp[a][b - 1][c];
return;
}
dp[a][b][c] = dp[a - 1][b][c] + dp[a - 1][b - 1][c] + dp[a - 1][b][c - 1] - dp[a - 1][b - 1][c - 1];
return;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input;
while ((input = br.readLine()) != null){
int[] ints = Arrays.stream(input.split(" ")).mapToInt(Integer::parseInt).toArray();
if(Arrays.stream(ints).allMatch(i -> i == -1)){
System.out.println(sb.toString());
return;
}
if(Arrays.stream(ints).filter(i -> i<=0).findAny().isPresent()){
soutFormat(ints[0],ints[1],ints[2], 1l);
continue;
}
if(Arrays.stream(ints).filter(i -> i>20).findAny().isPresent()){
soutFormat(ints[0],ints[1],ints[2], dp[20][20][20]);
continue;
}
soutFormat(ints[0],ints[1],ints[2], dp[ints[0]][ints[1]][ints[2]]);
}
}
public static void soutFormat(int a,int b,int c, long result){
sb.append(String.format("w(%d, %d, %d) = %d",a,b,c,result)+"\n");
}
}
728x90
'Algorithm > 백준' 카테고리의 다른 글
[백준/10844/Java] 쉬운 계단 수 (0) | 2022.02.20 |
---|---|
[백준/1932/Java] 정수 삼각형 (0) | 2022.02.19 |
[백준/2110/Java] 공유기 설치 (0) | 2022.02.16 |
[백준/2805/Java] 나무 자르기 (0) | 2022.02.15 |
[백준/1654/Java] 랜선 자르기 (0) | 2022.02.14 |