728x90
문제 설명
올바른 괄호 문자열이란 ()나 (())처럼 모든 괄호가 올바르게 닫힌 문자열을 의미합니다. 괄호 쌍의 개수 n이 주어질 때, n개의 괄호 쌍으로 만들 수 있는 모든 가능한 올바른 괄호 문자열의 개수를 반환하는 함수를 구현해야 합니다.
제한사항
- 1 ≤ n ≤ 14
- n은 정수
해결 방법
알고리즘: DFS (백트래킹)
- left와 right 두 개의 변수를 사용하여 현재까지 사용한 여는 괄호 (와 닫는 괄호 )의 개수를 추적합니다.
- 여는 괄호가 n보다 작으면 (를 추가하고 재귀 호출합니다.
- 닫는 괄호가 여는 괄호보다 적다면 )를 추가하고 재귀 호출합니다.
- left와 right가 모두 n이 되면 유효한 조합이므로 1을 반환합니다.
- 모든 경우를 탐색한 후, 가능한 경우의 수를 합산하여 반환합니다.
시간 복잡도
카탈란 수로, 가능한 괄호 문자열의 개수는 C(n) = (2n)! / (n! (n+1)!) 입니다.
따라서, 시간 복잡도는 O(4ⁿ / √n) 입니다.
구현 코드
function solution(n) {
function dfs(left, right) {
let count = 0;
if (left === n && right === n) return 1;
if (left < n) count += dfs(left + 1, right);
if (left > right) count += dfs(left, right + 1);
return count;
}
return dfs(0, 0);
}
'알고리즘' 카테고리의 다른 글
[Javascript] 프로그래머스 - 문자열 나누기 (0) | 2025.02.03 |
---|---|
[Javascript] 프로그래머스 - 둘만의 암호 (0) | 2025.02.02 |
[Javascript] 프로그래머스 - 네트워크 (0) | 2025.02.02 |
[Javascript] 프로그래머스 - 길 찾기 게임 (0) | 2025.02.02 |
[Javascript] 프로그래머스 - 구명보트 (0) | 2025.02.01 |