※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 10422번 문제인 괄호이다.
문제는 아래 링크를 확인하자.

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

 

10422번: 괄호

‘(‘, ‘)’ 문자로만 이루어진 문자열을 괄호 문자열이라 한다. 올바른 괄호 문자열이란 다음과 같이 정의된다. ()는 올바른 괄호 문자열이다. S가 올바른 괄호 문자열이라면, (S)도 올바른 괄호

www.acmicpc.net

이 문제는 주어진 길이 2N의 올바른 괄호문자열이 몇개인지 세는 문제이다. (홀수 길이의 괄호문자열은 올바를 수가 없다.)

 

이러한 괄호문자열의 개수는 N번째 카탈란 수(Catalan Number)와 같다는 것이 잘 알려져있다.

 

글쓴이는 카탈란 수를 구하는 점화식 중 C_(n+1) = (C_i * C_(n-i) 들의 합, i는 0부터 n까지) 을 이용하여 문제를 해결했다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

long long dp[2501];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	dp[0] = 1;
	for (int i = 1; i <= 2500; i++) {
		int L = 0, R = i - 1;
		while (L < i) {
			dp[i] += (dp[L++] * dp[R--]) % 1000000007;
		}
		dp[i] %= 1000000007;
	}
	
	int T; cin >> T;
	while (T--) {
		int x; cin >> x;
		if (x & 1) cout << 0 << '\n';
		else cout << dp[x >> 1] << '\n';
	}
}
728x90

+ Recent posts