나의 개발일지

[프로그래머스] Lv.2 괄호 변환 [Python, 파이썬] KAKAO 본문

프로그래머스

[프로그래머스] Lv.2 괄호 변환 [Python, 파이썬] KAKAO

YoonJuHan 2023. 10. 10. 22:17

 

def check(p):       # 올바른 괄호일까?
    if p[0] == ')':
        return False
    else:
        stack = [0] * len(p)
        k = -1 
        
        for i in p:
            if i == '(':
                k += 1
                stack[k] = '('
            elif stack[k] == '(' and i == ')':
                k -= 1
            else:
                return False
        return True

def make_uv(p):      # u, v를 만들자
    o, c = 0, 0
    u = ""

    for i in p:
        if i == '(':
            o += 1
            u += i
        else:
            c += 1
            u += i
        if o == c:
            v = p[o+c:]
            return u, v
    
def solution(p):
    answer = ''
    
    if not p or check(p):                   # 1. 빈 문자열 or 처음 부터 올바른 괄호면 바로 리턴
        return p
    
    u, v = make_uv(p)                        # 2. u, v 분리
    
    if check(u):                            # 3. u가 올바른 괄호면 v를 1번으로 보내
        return u + solution(v)              # 3-1. u에 solution(v)의 수행 결과를 붙이고 반환
    else:                                   # 4. u가 올바른 괄호가 아니라면
        answer = '(' + solution(v) + ')'    # 4-1 ~ 4-3. 과정 수행
        u = u[1:-1]                         # 4-4. 첫 번째, 마지막 문자 제거
        for i in u:                         # 4-4. 괄호 방향 뒤집어
            if i == '(':
                answer += ')'
            else:
                answer += '('
    return answer                           # 4-5. 생성된 문자열 반환
Comments