====== 올바른 괄호의 갯수 ====== * 카탈랑 수를 해로 갖는 대표적인 문제 ===== 풀이 ===== * 마지막 위치에는 닫는괄호(**)**)가 와야 한다. 이 괄호와 매칭되는 여는 괄호(**(**)가 i번째에 있는 경우들로 나눠서 생각할 수 있다. * 매칭되는 괄호가 i번째에 있으면.. * ....(....) i n * [0:i]까지가 올바른 괄호로 채워져야 하고, [i+1:n]까지가 올바른 괄호로 채워져야지 전체가 올바른 괄호가 된다. * 즉 dp[i] * dp[n-i-1]이 이 경우의 올바른 괄호의 갯수이다 * 이것을 모든 i에 대해서 합치면 dp[n] = dp[0]*dp[n-1] + dp[1]*dp[n-2] + ... + dp[n-1]*dp[0] 를 얻는다. * 이 점화식은 카탈랑 수의 점화식이고, 카탈랑 수는 닫힌 형태로 표현해서 O(n)에 계산이 가능하다. [[:ps:카탈랑 수]] 참고 ===== 코드 ===== """Solution code for "Programmers 12929. 올바른 괄호의 갯수". - Problem link: https://programmers.co.kr/learn/courses/30/lessons/12929 - Solution link: http://www.teferi.net/ps/problems/programmers/12929 """ import math def solution(n): return math.comb(2 * n, n) / (n + 1) {{tag>프로그래머스 ps:problems:programmers:Level_4}}