일반식을 추측하기 위해 초반 항 몇 가지를 구한다.
f(1) = 1, f(2) = 2 , f(3) = 5, f(4) = 14...
f(1) = ( )
f(2) = ( ) ( ), ( ( ) )
-> f(3) = f(1)에서 2쌍을 채운다 + f(2)에서 1쌍을 채운다 + g(3).
-> f(4) = f(1)에서 3쌍을 채운다 + f(2)에서 2쌍을 채운다 + f(3)에서 한 쌍을 채운다 + g(4)
...
이를 식으로 정리하면 아래와 같다.
f(3) = g(3) + f(1) * g(2) + f(2) * g(1) + g(3)
f(4) = g(4) + f(1) * g(3) + f(2) * g(2) + f(3) * g(1)
f(5) = g(5) + f(1) * g(4) + f(2) * g(3) + f(3) * g(2) + f(4) * g(1)
...
f(n) = g(n) + f(1) * g(n-1) + f(2) * g(n-2) + ... f(i) * g(n-i) + ... + f(n-1) * g(1)
g(1) = ( )
g(2) = ( ( ) )
g(3) = ( ( ( ) ) ), ( ( ) ( ) ),
g(4) = ( ( ) ( ( ) ) ), ( ( ) ( ) ( ) ), ( ( ( ) ) ( ) ), ( ( ( ( ) ) ) ), ( ( ( ) ( ) ) )
...
( ) 안에 n-1쌍의 괄호를 만들고 있다.
n-1쌍의 괄호를 만드는 경우의 수는 f(n-1)이다.
즉, g(n) = f(n-1)이므로 일반항은 아래와 같이 정리된다.
f(n) = f(n-1) * f(1) + f(n-2) * f(2) + ... + f(1) * f(n-1)
이는 아래 그림과 같이 정리된다.
function solution(n) {
let Molecular = n + 1, denominator = n;
for (let i = 1; i < n; i++) {
Molecular *= n + 1 + i;
denominator *= n - i;
}
return Number(Molecular / denominator) / (n + 1);
}