올바른 괄호의 갯수

태그: , ,

카테고리: ,


출처 프로그래머스 - 올바른 괄호의 갯수

사용 언어 자바

문제 설명

올바른 괄호란 (())나 ()와 같이 올바르게 모두 닫힌 괄호를 의미합니다. )(나 ())() 와 같은 괄호는 올바르지 않은 괄호가 됩니다. 괄호 쌍의 개수 n이 주어질 때, n개의 괄호 쌍으로 만들 수 있는 모든 가능한 괄호 문자열의 갯수를 반환하는 함수 solution을 완성해 주세요.

제한사항

괄호 쌍의 개수 N : 1 ≤ n ≤ 14, N은 정수

입출력 예

| n | result | | — | —— | | 2 | 2 | | 3 | 5 |


전형적인 카탈란…
그냥 카탈란 그 자체
Cn을 구하면 된다

  • Cn = 2nCn - 2nCn-1
    • 2nCn = [(2n)! / {n! * n!}]
    • 2nCn-1 = [(2n)! / {(n-1)! * (n+1)!}]
      • [(2n)! / {(n-1)! * (n+1)!}] * {n(n+1) / n(n+1)}
      • = [(2n)! / {n! * n!}] * {n / (n+1)}
  • = [(2n)! / {n! * n!}] - [(2n)! / {n! * n!}] * {n / (n+1)}
  • = [(2n)! / {n! * n!}] * [1 - {n / (n+1)}]
    • [1 - {n / (n+1)}] = {(n+1) / (n+1)} - {n / (n+1)} = {1 / (n+1)}
  • = [(2n)! / {n! * n!}] * {1 / (n+1)}
  • = [(2n)! / {n! * (n+1)!}]

분자 (2n)!를 분모의 (n+1)!만큼 약분해버리고
분자 팩토리얼 값을 먼저 구한뒤
다음 줄에서 남은 분모(n!)만큼 나눠주었다

제출 답안

class Solution {
    public int solution(int n) {
        long answer = 1L;
        for (long i = n * 2; i > n + 1; i--) answer *= i;
        for (long i = n; i > 1; i--) answer /= i;
        return (int) answer;
    }
}

댓글남기기