백준 9148 c++

magicdrill·2024년 3월 21일
0

백준 문제풀이

목록 보기
188/655

백준 9148 c++

#include <iostream>
#include <vector>

using namespace std;

int remember[21][21][21] = { 0 };

int input(int lower, int upper)
{
	//cout << "input()" << endl;
	int A;

	while (1)
	{
		cin >> A;
		if (A >= lower && A <= upper)
		{
			break;
		}
		else
		{
			;
		}
	}

	return A;
}

int w(int a, int b, int c)
{
	if (a <= 0 || b <= 0 || c <= 0)
	{
		return 1;
	}
	else if (a > 20 || b > 20 || c > 20)
	{
		return w(20, 20, 20);
	}
	else if (remember[a][b][c])
	{
		return remember[a][b][c];
	}
	else if (a < b && b < c)
	{
		remember[a][b][c] = w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c);
		return remember[a][b][c];
	}
	else
	{
		remember[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);
		return remember[a][b][c];
	}
}

void input_arr(vector<vector <int>> &vi)
{
	//cout << "input_arr()\n";
	int temp1, temp2, temp3;
	vector <int> temp;

	while (1)
	{
		temp1 = input(-50, 50);
		temp2 = input(-50, 50);
		temp3 = input(-50, 50);
		if (temp1 == -1 && temp2 == -1 && temp3 == -1)
		{
			break;
		}
		else
		{
			temp.push_back(temp1);
			temp.push_back(temp2);
			temp.push_back(temp3);
			vi.push_back(temp);
			temp.clear();
		}
	}

	return;
}

void show_result(vector<vector <int>> vi)
{
	//cout << "show_result()\n";
	int i, a, b, c;

	for (i = 0; i < vi.size(); i++)
	{
		a = vi[i][0];
		b = vi[i][1];
		c = vi[i][2];
		cout << "w(" << a << ", " << b << ", " << c << ") = "  << w(a, b, c) << "\n";
	}

	return;
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	vector<vector <int>> arr;

	input_arr(arr);
	show_result(arr);

	return 0;
}

0개의 댓글