https://school.programmers.co.kr/learn/courses/30/lessons/60058
올바른 괄호를 체크하는건 푼 경험이 있어서 금방 작성할 수 있었고,
문제에서 하라는대로 코드를 작성하면 풀렸다. 재귀여서 복잡할 수 있는데 친절하게 알려줘서 큰 혼란은 없었다.
def convert_p(p): # 괄호 방향 뒤집기
temp_str = ""
for one_p in p:
if one_p=="(":
temp_str += ")"
else:
temp_str += "("
return temp_str
def check_correct_par(p): # 올바른 괄호 문자열인지 확인
cnt = 0
for i in range(len(p)):
if p[i]=="(":
cnt+=1
else:
cnt-=1
if cnt < 0:
return False
return cnt == 0
def correct(p):
if not p: # 1단계
return ""
idx = 0
cnt = 0
for i in range(len(p)):
if p[i]=="(":
cnt+=1
else:
cnt-=1
if cnt == 0:
idx = i
break
u, v = p[:idx+1], p[idx+1:] # 2단계
if check_correct_par(u): # 3단계
return u + correct(v)
else:
now_str = "(" # 4-1단계
now_str += correct(v) # 4-2단계
now_str += ")" # 4-3단계
now_str += convert_p(u[1:-1]) # 4-4단계
return now_str # 4-5단계
def solution(p):
return correct(p)
check_correct_par에서 cnt==0 안해주고 True 반환해도 될 듯(균형잡힌게 들어온다는 전제가 있으므로)