※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 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
'BOJ' 카테고리의 다른 글
[BOJ 17131 // C++] 여우가 정보섬에 올라온 이유 (0) | 2021.06.16 |
---|---|
[BOJ 1343 // C++] 폴리오미노 (0) | 2021.06.15 |
[BOJ 1670 // C++] 정상 회담 2 (0) | 2021.06.13 |
[BOJ 1057 // C++] 토너먼트 (0) | 2021.06.12 |
[BOJ 16443 // C++] Bolinhas de Gude (0) | 2021.06.11 |