https://programmers.co.kr/learn/courses/30/lessons/60058
이 문제는 문제의 조건이 너무 상세하게 나와서 그냥 문제 조건에 나온 내용을 코드로 그대로 옮겼더니 풀렸다.
별로 어려울건 없었는데 문제 설명 중, 균형잡힌괄호문자열의 의미를 잠깐 잘못 이해했다.
균형잡힌문자열은 열린괄호와 닫힌괄호의 수가 같은 것이다.
문제 조건 중 '단, u는 "균형잡힌 괄호 문자열"로 더 이상 분리할 수 없어야 하며' 라는 부분이 있는데 이 부분에서
더이상 분리할 수 없으려면 무조건 두개로 자르면 되지 라고 생각했다가 아래 예시설명을 보고 곧 아님을 알았다.
균형잡힌 문자열이면서 더이상 분리할 수 없어야 한다.
나머지는 그냥 조건이 시키는대로 그대로 코드로 옮겼을 뿐이다.
다만 코드가 조금 길어질듯 하여 함수를 나눴다.
쉬움..
def separate_bracket(p):
open_cnt = 0
close_cnt = 0
u = ''
v = ''
for i in range(len(p)):
if p[i] == '(':
open_cnt += 1
else:
close_cnt += 1
if open_cnt == close_cnt:
u = p[:i + 1]
v = p[i + 1:]
break
return u, v
def is_perfect(p):
temp = []
if p[0] == ')':
return False
for c in p:
if c == '(':
temp.append(c)
else:
if temp:
temp.pop()
else:
return False
if temp:
return False
return True
def solution(p):
answer = ''
if p == '':
return ''
u, v = separate_bracket(p)
if is_perfect(u):
u += solution(v)
return u
else:
temp = '('
temp += solution(v)
temp += ')'
for i in range(1, len(u) - 1):
if u[i] == ')':
temp += '('
else:
temp += ')'
return temp
return answer