괄호 변환

발자·2023년 4월 25일
0

programmers

목록 보기
18/34

문제

# u, v로 분할
def uv(p):
    open = 0
    close = 0
    l = 0
    while ((open == 0 and close == 0) or open != close) and l < len(p):
        if p[l] == '(':
            open += 1
        else:
            close += 1
        l += 1
    return p[:l], p[l:]

# 정상 괄호인지 확인
def tf(u):
    open = 0
    close = 0
    # (보다 )가 적거나 같으면 정상
    for i in u:
        if i == '(':
            open += 1
        else:
            close += 1
        if open < close:
            return False
    return True

def solution(p):
	# p가 빈열이면 리턴
    if p == '':
        return ''
    u, v = uv(p)
    # 정상이면 재귀로 v열 처리
    if tf(u):
        return u + solution(v)
    # 정상이 아니라면
    else:
        answer = '('
        answer += solution(v)
        answer += ')'
        # 앞뒤 자른 후 뒤집기
        for i in u[1:-1]:
            if i == '(':
                answer += ')'
            else:
                answer += '('
    return answer

0개의 댓글