목차

     

     


     

     

    [백준 9184번 C/C++] 신나는 함수 실행

     

     

    https://www.acmicpc.net/problem/9184

     

    9184번: 신나는 함수 실행

    입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다.

    www.acmicpc.net


     

    해결전략

     

    DP

     

    Memorization

     

     


     

    코드

     

    #include<iostream>
    using namespace std;
    
    int save[51][51][51];
    
    int w(int a, int b, int c)
    {
    	if(save[a][b][c]!=0) return save[a][b][c];
    	
    	if (a <= 0 || b <= 0 || c <= 0) 
    	{
    		return save[a][b][c] = 1;
    	}
    
    	if (a > 20 || b > 20 || c > 20)
        {
        	return save[a][b][c] = w(20, 20, 20);
    	}
    
    	if (a < b && b < c) 
        {
        	return save[a][b][c] = w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c);
    	}
    	else 
    	{
        	return save[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);
    	}
    }
    
    int main() {
    	int a, b, c;
    		
    	while(1)
    	{
    		scanf("%d %d %d", &a, &b, &c);
    		if(a==-1 && b==-1 && c==-1) break;
    		
    		if (a <= 0 || b <= 0 || c <= 0) printf("w(%d, %d, %d) = 1\n", a, b, c);
    		else
    		{
    			w(a, b, c);	
    			printf("w(%d, %d, %d) = %d\n", a, b, c, save[a][b][c]);
    		}
    	}
    	
    	return 0;
    }