C# 9184번 신나는 함수 실행

2022. 1. 22. 17:52C#/[백준] 동적 계획법1

문제

코드 :

using System;
namespace PracticeAlgo
{
    class Program
    {
        static int[,,] w;
        static void Main(string[] args)
        {
            using (var prnt = new System.IO.StreamWriter(Console.OpenStandardOutput()))
            {
                w = new int[101, 101, 101];
 
                while (true)
                {
                    var a = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
                    if (a[0] == -1 && a[1] == -1 && a[2] == -1)
                    {
                        break;
                    }
                    if (w[a[0] + 50, a[1] + 50, a[2] + 50] == 0)
                    {
                        GetW(a[0] + 50, a[1] + 50, a[2] + 50);
                    }
                    prnt.WriteLine(string.Format("w({0}, {1}, {2}) = {3}", a[0], a[1], a[2], w[a[0] + 50, a[1] + 50, a[2] + 50]));
                }
            }
        }
        static int GetW(int a, int b, int c)
        {
            if (w[a, b, c] != 0)
            {
                return w[a, b, c];
            }
            if (a <= 50 || b <= 50 || c <= 50)
            {
                w[a, b, c] = 1;
            }
            else if (a > 70 || b > 70 || c > 70)
            {
                w[a, b, c] = GetW(70, 70, 70);
            }
            else if (a < b && b < c)
            {
                w[a, b, c] = GetW(a, b, c - 1) + GetW(a, b - 1, c - 1) - GetW(a, b - 1, c);
            }
            else
            {
                w[a, b, c] = GetW(a - 1, b, c) + GetW(a - 1, b - 1, c) + GetW(a - 1, b, c - 1) - GetW(a - 1, b - 1, c - 1);
            }
            return w[a, b, c];
        }
    }
}

코드 설명 :

먼저 수의 범위가 -50부터 50까지이므로 +50을하여 인덱스가 0부터 시작할 수 있도록 전처리작업을 진행한다.

'C# > [백준] 동적 계획법1' 카테고리의 다른 글

C# 1932번 정수 삼각형  (0) 2022.01.22
C# 1149번 RGB거리  (0) 2022.01.22
C# 9461번 파도반 수열  (0) 2022.01.22
C# 1904번 01타일  (0) 2022.01.22
C# 1003번 피보나치 함수  (0) 2022.01.22