문제출처: https://programmers.co.kr/learn/courses/30/lessons/60058
접근법
코드
# 올바른 괄호 문자열
def isCorrect(p):
s = []
for bracket in p:
if( bracket == '('):
s.append(bracket)
else: # ')'
if( s and s[-1] == '(' ):
s.pop(-1)
else:
s.append(bracket)
return False if s else True
# 재귀
def solve(s):
# 빈 문자열
if( not s ):
return s
l,r = 0,0
index = 0
for i,bracket in enumerate(s):
if( bracket == '(' ):
l += 1
else:
r += 1
if( r-l == 0 ):
index = i
break
u = s[:index+1]
v = s[index+1:]
if( isCorrect(u) ):
return u + solve(v)
else:
new_u = ""
for bracket in u[1:-1]:
new_u += '(' if bracket == ')' else ')'
return "(" + solve(v) + ")" + new_u
def solution(p):
return solve(p)