이 문제에서는 정수 n이 주어집니다. 우리의 임무는 n개의 균형이 잡힌 괄호의 가능한 모든 쌍을 인쇄하는 것입니다.
대괄호 모든 해당 여는 기호에 대해 닫는 기호가 있는 괄호 쌍입니다. 또한 쌍은 적절하게 중첩되어야 합니다.
문제를 이해하기 위해 예를 들어 보겠습니다.
Input: n = 2 Output: {}{} {{}}
이 문제를 해결하려면 대괄호 쌍을 추적해야 합니다. 괄호의 초기 개수는 0입니다. 그런 다음 총 괄호 개수가 n보다 작아질 때까지 재귀적으로 함수를 수행합니다. 카운트 대괄호, 카운트에 따라 대괄호를 재귀적으로 호출합니다. 여는 대괄호 수가 닫는 것보다 많으면 닫는 대괄호를 넣은 다음 나머지 쌍 수로 이동하고 여는 대괄호가 n보다 작으면 나머지 대괄호 쌍을 재귀적으로 호출합니다.
예시
우리 솔루션의 구현을 보여주는 아래 코드,
# include<iostream> using namespace std; # define MAX_COUNT 100 void printParenthesesPairs(int pos, int n, int open, int close){ static char str[MAX_COUNT]; if(close == n) { cout<<str<<endl; return; } else { if(open > close) { str[pos] = '}'; printParenthesesPairs(pos+1, n, open, close+1); } if(open < n) { str[pos] = '{'; printParenthesesPairs(pos+1, n, open+1, close); } } } int main() { int n = 3; cout<<"All parentheses pairs of length "<<n<<" are:\n"; if(n > 0) printParenthesesPairs(0, n, 0, 0); getchar(); return 0; }
출력
All parentheses pairs of length 3 are − {}{}{} {}{{}} {{}}{} {{}{}} {{{}}}