[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