본문으로 바로가기
def solution(p):
    if p == '':
        return ''
    u = ''
    v = ''
    for i in p:
        u += i
        if u.count('(') == u.count(')'):
            break
    v = p[len(u):]
    if check_right(u):
        return u + solution(v)
    else:
        return '(' + solution(v) + ')' + trim(u)

    
def check_right(s): # 올바른 괄호 문자열 검사
    stack = []
    for i in s:
        if len(stack) > 0:
            if stack[-1] == '(' and i == ')':
                stack.pop()
            else:
                stack.append(i)
        else:
            stack.append(i)
    if len(stack) == 0:
        return True
    else:
        return False

def trim(s):
    res = ''
    if len(s)==2:
        return ''
    else:
        for i in range(1, len(s)-1):
            if s[i] == '(':
                res += ')'
            else:
                res += '('
        return res

주어진 조건대로 착실하게 구현하면 되는 문제인 것같다.

문자열은 역시 파이썬 짱짱맨.

괄호 쌍 검사는 스택을 이용하는 것이 국룰.

trim은 좌우 문자 제거후 뒤집는 함수이다.

 

카카오 문제들 되게 재밌는 것 같다.