와! 개꿀! 조합론 문제!
출처 : programmers.co.kr/learn/courses/30/lessons/12929
코딩테스트 연습 - 올바른 괄호의 갯수
올바른 괄호란 (())나 ()와 같이 올바르게 모두 닫힌 괄호를 의미합니다. )(나 ())() 와 같은 괄호는 올바르지 않은 괄호가 됩니다. 괄호 쌍의 개수 n이 주어질 때, n개의 괄호 쌍으로 만들 수 있는 모
programmers.co.kr
알고리즘
여러 방법이 있을 것이다.
(1) 정석으로 정말 괄호 넣는 경우를 따져서 풀기... (...)
(2) 점화식 풀이
(3) 카탈란수인걸 알고 있는 자는 프리패스 하기.
(3)은 너무 양심이 없어, (2)로 진행할려고 한다.
(2)의 원리는 간단하다. n-1개의 괄호쌍이 완벽할 때, 1개를 더 추가한다고 보면 된다.
그경우, (A)B의 형태일 거고, A도 완벽하면 되고, B도 완벽하면 된다.
Cn = C0Cn-1 + C1Cn-2 + ... + Cn-1C0 으로 풀면 된다.
코드
def solution(n):
answer = [1, 1]
if n == 1:
return 1
else:
for i in range(2, 15):
count = 0
for j in range(0, i):
count += (answer[j]*answer[i-j-1])
answer.append(count)
return answer[n]
별해(노양심풀이), 카탈란수의 일반항이다.
import math
def solution(n):
answer = math.factorial(2*n) / (math.factorial(n) ** 2) / (n+1)
return answer
'알고리즘 & PS' 카테고리의 다른 글
[Python] 프로그래머스 Lv 3 - 단속카메라 (0) | 2021.04.28 |
---|---|
[Python] 프로그래머스 Lv 3 - 네트워크 (0) | 2021.04.28 |
[Python] 2018 Kakao Blind Recruitment [3차] n진수 게임 (0) | 2021.04.26 |
[Python] 프로그래머스 Lv 2 - 게임 맵 최단거리 (0) | 2021.04.26 |
[Python] 프로그래머스 Lv 4 - 버스여행 (0) | 2021.04.25 |