문제링크: https://leetcode.com/problems/generate-parentheses/
만약 현재 '(': a개, ')': b개, 현재 결과 "????"
라고 하면 이를
'(': a - 1개, ')': b + 1개, 결과 "????("
'(': a개, ')': b - 1개, 결과 "????)"
의 결과를 찾는 같은 문제로 바꿀 수 있다. 이를 점화식으로 생각하고 초기조건은 (
n개, 탈출조건은 (
, )
가 모두 0개 일 경우의 결과로 정하면 재귀함수를 만들 수 있다.
result
를 결과를 담을 클로저의 자유변수로 선언한다.dfs
함수는 백트래킹으로 현재 변수를 바탕으로 가능한 결과를 result
에 담는 함수다.dfs
재귀함수로 문제를 진행한다.dfs
함수에 초기조건을 삽입하면 결과가 result
에 추가되고 모든 결과를 반환한다.var generateParenthesis = function(n) {
// dfs
const result = [];
const dfs = (leftCount, rightCount, curResult) => {
if (leftCount === 0 && rightCount === 0) result.push(curResult);
if (leftCount < 0 || rightCount < 0) return;
dfs(leftCount - 1, rightCount + 1, curResult + '(');
dfs(leftCount, rightCount - 1, curResult + ')');
}
dfs(n, 0, '');
return result;
};