Link
Today
Total
10-17 08:33
Archives
관리 메뉴

초보개발자 긍.응.성

[Java] Level 4. 올바른 괄호의 개수 본문

코딩테스트/Programmers

[Java] Level 4. 올바른 괄호의 개수

긍.응.성 2019. 12. 12. 12:19
반응형

Level 4. 올바른 괄호의 개수 (출처 - 프로그래머스)

 

코딩테스트 연습 - 올바른 괄호의 갯수 | 프로그래머스

올바른 괄호란 (())나 ()와 같이 올바르게 모두 닫힌 괄호를 의미합니다. )(나 ())() 와 같은 괄호는 올바르지 않은 괄호가 됩니다. 괄호 쌍의 개수 n이 주어질 때, n개의 괄호 쌍으로 만들 수 있는 모든 가능한 괄호 문자열의 갯수를 반환하는 함수 solution을 완성해 주세요. 제한사항 괄호 쌍의 개수 N : 1 ≤ n ≤ 14, N은 정수 입출력 예 n result 2 2 3 5 입출력 예 설명 입출력 예 #1 2개의 괄호쌍으로 [ (())

programmers.co.kr

너무 어려운 문제였고 이를 찾아보다가 새로운 개념을 알게되었다.

카탈란 수 라는 수학적 개념이 필요한 문제였고 이를 위해 아래의 페이지를 참고했다.

https://suhak.tistory.com/77

 

카탈란 수(catalan number)

카탈란 수(catalan number)로 불리는 수열이 있다. 핀란드 수학자 카탈란의 이름을 단 이 수열을 기호로는 $C_n$으로 나타낸다. 이 수열은 여러가지 다른 문제들을 풀이하는 과정에서 나타난다. 카탈란 수열 문제..

suhak.tistory.com

 

long으로 선언한 후 type casting을 해준 이유는 factorial연산 과정에서 overflow가 발생하기 때문입니다.

class Solution {
    public int solution(int n) {
        long molecular = 1;
        long denominator = 1;
        int num = 2*n;
        for (int i = 1; i <= n; i++) {
            molecular *= num--;
            denominator *= i;
        }

        return (int)(molecular / (denominator * (n+1)));
    }
}

많은 사람들이 BigInteger를 사용해서도 풀어냈길래 추가적으로 이 방법을 게시합니다.

class Solution {
    public int solution(int n) {
    	BigInteger molecular = BigInteger.ONE;
    	BigInteger denominator = BigInteger.ONE;
    	
        int num = 2*n;
        for (int i = 1; i <= n; i++) {
            molecular = molecular.multiply(BigInteger.valueOf(num--));
            denominator = denominator.multiply(BigInteger.valueOf(i));
        }
        return molecular.divide(denominator).divide(BigInteger.valueOf(n+1)).intValue();
    }
}

 

반응형

'코딩테스트 > Programmers' 카테고리의 다른 글

[Java] Level 3. 추석 트래픽  (2) 2020.09.21
Comments