728x90
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.StringTokenizer;
public class Main {
static int dp[][][];
public static int w( int a, int b, int c ) {
if( dp[a][b][c] > 0 )
return dp[a][b][c];
if( a <= 0 || b <= 0 || c <= 0 )
return dp[a][b][c] = 1;
if( a < b && b < c )
return dp[a][b][c] = w( a, b, c-1 ) + w( a, b-1, c-1 ) - w( a, b-1, c );
else
return dp[a][b][c] = w( a-1, b, c ) + w( a-1, b-1, c ) + w( a-1, b, c-1 ) - w( a-1, b-1, c-1 );
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) );
StringTokenizer st;
StringBuilder sb = new StringBuilder();
int a, b, c, r = 0, ad, bd, cd;
while( true ) {
st = new StringTokenizer( br.readLine() );
a = Integer.parseInt( st.nextToken() );
b = Integer.parseInt( st.nextToken() );
c = Integer.parseInt( st.nextToken() );
if( a == -1 && b == -1 && c == -1 )
break;
sb.append( "w(" + a + ", " + b + ", " + c + ") = " );
if( a <= 0 || b <= 0 || c <= 0 )
r = 1;
else if( a > 20 || b > 20 || c > 20 ) {
dp = new int[21][21][21];
r = w( 20, 20, 20 );
}
else {
dp = new int[a+1][b+1][c+1];
r = w( a, b, c );
}
sb.append( r + "\n" );
}
br.close();
System.out.println( sb.toString() );
}
}
반응형
'코딩 문제 풀기 ( Algorithm problem solving ) > 백준 온라인 저지 ( BOJ )' 카테고리의 다른 글
[백준(Baekjoon)][자바(java)] 1010 : 다리 놓기 / 정수론 및 조합론 (0) | 2021.01.21 |
---|---|
[백준(Baekjoon)][자바(java)] 13305 : 주유소 / 그리디 알고리즘 (0) | 2021.01.21 |
[백준(Baekjoon)][자바(java)] 10757 : 큰 수 A+B / 기본 수학 1 (0) | 2021.01.19 |
[백준(Baekjoon)][자바(java)] 2887 : 행성 터널 / 최소 신장 트리 (0) | 2020.12.30 |
[백준(Baekjoon)][자바(java)] 1774 : 우주신과의 교감 / 최소 신장 트리 (0) | 2020.12.30 |