728x90
"""
p는 '(' 와 ')' 로만 이루어진 문자열이며 길이는 2 이상 1,000 이하인 짝수입니다.
문자열 p를 이루는 '(' 와 ')' 의 개수는 항상 같습니다.
"""
def solution(p):
if p=='': # 1
return p
r=True
c=0
for i in range(len(p)): # 2
if p[i]=='(':
c-=1
else:
c+=1
if c>0: # 순서 올바르지않음
r=False
if c==0:
if r: # 3
return p[:i+1]+solution(p[i+1:])
else: # 4
return '('+solution(p[i+1:])+')'+''.join(list(map(lambda x:'(' if x==')' else ')',p[1:i]) ))
def r(w):
a = 0
b = 0
for i in range(len(w)):
if w[i] == "(":
a += 1
elif w[i] == ")":
b += 1
if a == b: # 균형잡힌
return w[:i+1], w[i+1:]
def ck(u):
stack = []
for i in u:
if i == '(':
stack.append(i)
else:
if not stack:
return False
stack.pop()
return True
def solution(p):
answer = ''
# 1
if not p:
return ''
# 2
u, v = r(p)
if ck(u): # 3
return u + solution(v) # 3-1
else: # 4
answer += '(' # 4-1
answer += solution(v) # 4-2
answer += ')' # 4-3
for j in u[1:len(u) - 1]: # 4-4
if j == '(':
answer += ')'
else:
answer += '('
# 4-5
return answer
728x90