[Programmers] - 괄호 변환 (Level 2)
2020 KAKAO BLIND RECRUITMENT
LEVEL : 2
문제링크
p = "(()())()"
def solution(p):
# 1. 입력이 빈 문자열인 경우
answer = ""
if not p:
return ""
# 2. 문자열 p를 u, v로 분리
u,v = "",""
for i in range(len(p)):
if i>1 and u.count('(') == u.count(')'):
v=p[i:]
break
else:
u+=p[i]
# 3. 문자열 u가 '올바른 괄호 문자열'이면 v에 대해 다시 수행
check = []
for t in u:
check.append(t)
if len(check)>1 and check[-2]=='(' and check[-1] == ')':
check.pop(-1)
check.pop(-1)
if not check:
return u+solution(v) # 3-1. 수행한 결과 문자열을 u에 이어붙인 후 반환
# 4. 문자열 u가 '올바른 괄호 문자열'이 아니라면
else:
dict = {'(':')', ')':'('}
return '(' + solution(v) + ')' + ''.join([dict[j] for j in u[1:-1]]) # 4-1 ~ 4-5
solution(p)
'(()())()'
Comments