1. Brute Force (특정 길이의 괄호 문자열을 전부 만들고 적합한지 판단)
from typing import *
class Solution:
answer = []
def generateParenthesis(self, n: int) -> List[str]:
self.answer=[]
self.dfs("", n)
return self.answer
def dfs(self, cur, target):
if len(cur) == target * 2:
if self.check(cur):
self.answer.append(cur)
return
else:
self.dfs(cur + "(", target)
self.dfs(cur + ")", target)
def check(self, input_str):
stack = []
for i in range(len(input_str)):
if not stack or input_str[i] == "(":
stack.append(input_str[i])
else:
if not stack or stack[-1] != "(":
return False
else:
stack.pop()
if not stack:
return True
return False
2. 창의적인 Backtracking
from typing import *
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
answer = []
def dfs(string_list, left, right):
if len(string_list) == 2 * n:
answer.append("".join(string_list))
return
if left < n:
string_list.append("(")
dfs(string_list, left + 1, right)
string_list.pop()
if right < left:
string_list.append(")")
dfs(string_list, left, right + 1)
string_list.pop()
dfs([], 0, 0)
return answer
'Algorithm' 카테고리의 다른 글
46. Permutations (0) | 2021.04.05 |
---|---|
94. Binary Tree Inorder Traversal (0) | 2021.04.05 |
2105. [모의 SW 역량테스트] 디저트 카페 (0) | 2021.04.04 |
15. 3Sum (0) | 2021.04.02 |
5. Longest Palindromic Substring (0) | 2021.04.01 |