접근
- 기본적인 백트래킹 문제, 문제 조건이 크게 까다롭지 않아 브루트 포스로 풀 수도 있지만 백트래킹 방법이 출제 의도인 것 같음
- 문제의 해답이 될 수 있는 경우에 대한 경우를 일반화해야 함. 여기서 막혔음
- 자연스럽게 중간에 오답이 되는 케이스는 흘려 보내는 논리 흐름이 백트래킹의 핵심
- 스택이 아닌 변수를 활용하여 괜찮은 솔루션을 작성할 수 있음
솔루션
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
answer = []
def backtracking(answer_str, left, right):
# if it reach to the end, add answer
if len(answer_str) == n*2:
answer.append(answer_str)
return
# first, we have to check whether can add more '('
if left < n:
backtracking(answer_str + '(', left+1, right)
# second, if we can add more ')' add it
if right < left:
backtracking(answer_str + ')', left, right+1)
backtracking("", 0, 0)
return answer
'컴퓨터공학 & 정보통신 > 알고리즘 문제 풀이' 카테고리의 다른 글
[LeetCode] 46. Permutations (0) | 2023.03.21 |
---|---|
[LeetCode] 17. Letter Combinations of a Phone Number (0) | 2023.03.20 |
[LeetCode] 19. Remove Nth Node From End of List (0) | 2023.03.16 |
[LeetCode] 2. Add Two Numbers (0) | 2023.03.13 |
[GeeksforGeeks] Special array reversal (0) | 2023.02.22 |