티스토리 뷰
📌문제
https://school.programmers.co.kr/learn/courses/30/lessons/60058
📌풀이
문제에 제시된 알고리즘을 재귀적으로 구현
📌코드
#균형 잡힌 문자열의 인덱스 반환
def balanced_index(p):
count=0 #왼쪽 괄호 개수
for i in range(len(p)):
if p[i]=='(':
count+=1
else:
count-=1
if count==0:
return i
#올바른 괄호 문자열인지 판단
def check_proper(p):
count=0 #왼쪽 괄호 개수
for i in p:
if i=='(':
count+=1
else:
if count==0: #쌍이 맞지 않은 경우 False
return False
count-=1
return True #쌍이 맞는 경우 True
def solution(p):
answer = ''
if p=='':
return answer
index=balanced_indexp(p) #균형 잡힌 괄호 문자열의 인덱스
u=p[:index+1]
v=p[index+1:]
#올바른 괄호 문자열이면 v에 대해 함수를 수행한 결과 붙여 반환
if check_proper(u):
answer=u+solution(v)
#올바른 괄호 문자열 아니라면
else:
answer='('
answer+=solution(v)
answer+=')'
u=list(u[1:-1]) #첫번째와 마지막 문자 제거
for i in range(len(u)):
if u[i]=='(':
u[i]=')'
else:
u[i]='('
answer+="".join(u)
return answer
📌참고