https://programmers.co.kr/learn/courses/30/lessons/60058
구현, 재귀 문제
# 균형잡힌 문자열의 인덱스
def balanced_index(p):
cnt = 0
for i in range(len(p)):
if p[i] == '(':
cnt += 1
else:
cnt -= 1
if cnt == 0:
return i + 1
# 올바른 문자열 여부
def is_proper(p):
cnt = 0
for ch in p:
if ch == '(':
cnt += 1
else:
cnt -= 1
if cnt < 0:
return False
return True
def solution(p):
rst = ""
if p == '':
return rst
idx = balanced_index(p)
u = p[:idx]
v = p[idx:]
if is_proper(u):
return u + solution(v)
else:
rst += '('
rst += solution(v)
rst += ')'
tmp = list(u[1:-1])
for i in range(len(tmp)):
if tmp[i] == '(':
tmp[i] = ')'
else:
tmp[i] = '('
rst += "".join(tmp)
return rst
print(solution("()))((()")) # ()(())()
'이코테' 카테고리의 다른 글
[19번] 연산자 끼워 넣기 (0) | 2021.05.04 |
---|---|
[17번] 경쟁적 전염 (0) | 2021.05.03 |
[16번] 연구소 (0) | 2021.05.03 |
[15번] 특정거리의 도시 찾기 (0) | 2021.05.03 |