코딩테스트

BFS&DFS_심화18) 괄호변환 _ python

728x90

문제링크

https://school.programmers.co.kr/learn/courses/30/lessons/60058

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코드

def divide(p):
    openP = 0
    closeP = 0
    for i in range(len(p)):
        if p[i] == '(':
            openP += 1
        elif p[i] == ')':
            closeP += 1
        if openP == closeP:
            return p[:i+1],p[i+1:]
    
def check(u):
    stack = []
    for i in u:
        if i == '(':
            stack.append(i)
        else:
            if not stack:
                return False
            else:
                stack.pop()
    return True
    
def solution(p):
    result = ''
    # 1번
    if not p :
        return ''
    # 2번
    u, v = divide(p)
    # 3번
    if check(u):
        return u + solution(v)
    else:
        result += '(' + solution(v) + ')'
        for i in u[1:-1]:
            if i == '(':
                result += ')'
            else:
                result += '('
        return result
728x90