[프로그래머스] 올바른 괄호의 갯수 Java 풀이 (카탈란수)

    https://programmers.co.kr/learn/courses/30/lessons/12929

    위 문제가 DP문제인것은 눈치채기가 쉬운데 도저히 규칙히 찾아지지가 않았다. 찾아보니 대표적인 카탈란수 문제였다.

    문제 풀이

    카탈란수를 간략하게 설명하면 짝이 주어질때의 경우의 수를 나열한 수열이다. 위 괄호는 “(” 가 나올때 뒤에 무조건 “)” 가 나와야 하고

     

    아래 산문제도 짝이 “/” 이 나오면 “\” 나와야하는 짝이 있어야하므로 대표적인 카탈란 수 문제이다.

    그래서 대표적인 점화식이 존재한다. 원래 DP문제는 점화식을 찾아야하는 문제인데 카탈란 수 문제인걸 알면은 점화식을 바로 알수가 있다.

    점화식은 아래와 같다. 이 점화식을 이용하여 문제를 풀면 된다.

    코드

    public int solution(int n) {
        int dp[] = new int[n + 1];
        dp[0] = 1;
        dp[1] = 1;
    
        for (int i = 2; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                dp[i] += dp[i-j] * dp[j-1];
            }
        }
    
        return dp[n];
    }
    

    참조 : https://suhak.tistory.com/77

     

    댓글

    Designed by JB FACTORY