개발자일걸요..?

9184번 신나는 함수 실행 본문

알고리즘코딩/Baekjoon Online Judge

9184번 신나는 함수 실행

Re_A 2021. 3. 3. 21:14
728x90
반응형

문제링크 : www.acmicpc.net/problem/9184

 

9184번: 신나는 함수 실행

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

www.acmicpc.net



<알고리즘>

  1) 우선 주어진 조건에 따라 분기를 실행하여 재귀 함수 구조를 만든다.

  2) 앞에서 이미 한 연산을 뒤에서 또하면 시간이 너무 많이 소요되기에 이미 한 연산은 3차배열을 통해 저장한다.

  3) 이미 앞서 계산한 값이 있으면 그 값을 return하고 없으면 계산하는 과정을 거친다.

 

 

  

 

메모리 : 2052KB    시간 : 504ms

#include <iostream>
using namespace std;

int d[21][21][21];
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 ((a < b) && (b < c)) {
		if (d[a][b][c] != 0) return d[a][b][c];
		return d[a][b][c] = w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c);
	}
	else {
		if (d[a][b][c] != 0) return d[a][b][c];
		return d[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 = 0;
	int b = 0;
	int c = 0;
	while (true) {
		cin >> a >> b >> c;
		if (a == -1 && b == -1 && c == -1) break;
		cout << "w(" << a << ", " << b << ", " << c << ") = " << w(a, b, c) << "\n";
	}
}
반응형

'알고리즘코딩 > Baekjoon Online Judge' 카테고리의 다른 글

9461번 파도반 수열  (0) 2021.03.04
1904번 01타일  (0) 2021.03.03
1629번 곱셈  (0) 2021.03.02
1780번 종이의 개수  (0) 2021.03.01
1992번 쿼드트리  (0) 2021.03.01
Comments