December 02, 2025
n์์ ๊ดํธ๊ฐ ์ฃผ์ด์ง๋ฉด ์ฌ๋ฐ๋ฅธ ๊ดํธ ์กฐํฉ์ ๋ชจ๋ ๋ฐํํ๋ ๋ฌธ์ ๋ค.
์ด ๋ฌธ์ ๋ ๋ฐฑํธ๋ํน(Backtracking) ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ ์ ์์ต๋๋ค. n์์ ๊ดํธ๋ก ๋ง๋ค ์ ์๋ ๋ชจ๋ ์ฌ๋ฐ๋ฅธ ์กฐํฉ์ ์ฌ๊ท์ ์ผ๋ก ์์ฑํฉ๋๋ค.
ํต์ฌ: ๊ธฐ์ตํด์ผ ํ ์ ๋ณด๋ฅผ ๋ฐฑํธ๋ํน ํจ์์ ์ ๋ฌํ์ฌ ํ๊ฒ๊น์ง ๋๋ฌํ๋ ์กฐํฉ์ ์ฐพ๋ ๊ฒ์ด ์ค์ํ๋ค. ์ด๋, ์ฌ๋ ๊ดํธ์ ๋ซ๋ ๊ดํธ์ ๊ฐ์๋ฅผ ์ถ์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
res = []
def backtrack(open_cnt, close_cnt, path):
if len(path)==n*2:
res.append(path[:])
return
if open_cnt < n:
backtrack(open_cnt+1, close_cnt, path+"(")
if close_cnt < open_cnt:
backtrack(open_cnt, close_cnt+1, path+")")
backtrack(0, 0, "")
return res
O(4^n / sqrt(n)) ; n์ ๊ดํธ ์์ ๊ฐ์์
๋๋ค. ๊ฐ๋ฅํ ์ฌ๋ฐ๋ฅธ ๊ดํธ ์กฐํฉ์ ์๋ ์นดํ๋ ์๋ก ํํ๋๋ฉฐ, ์ด๋ ๋๋ต์ ์ผ๋ก O(4^n / sqrt(n))์ ํด๋นํฉ๋๋ค.O(n) ; ์ฌ๊ท ํธ์ถ ์คํ๊ณผ ํ์ฌ ๊ฒฝ๋ก๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ณต๊ฐ์
๋๋ค.Constraints:
1 <= n <= 8