본문 바로가기
알고리즘/프로그래머스

[프로그래머스] 괄호 변환 (python)

by 김홍중 2021. 7. 2.

1. 문제

문제링크

 

코딩테스트 연습 - 괄호 변환

카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를

programmers.co.kr

 

2. 코드

def reverse_brackets(brackets):
    reversed_brackets = ""
    
    for bracket in brackets:
        if bracket == "(":
            reversed_brackets += ")"
        else:
            reversed_brackets += "("
    return reversed_brackets

def check_proper(brackets):
    pair_count = 0
    temp = []
    
    for bracket in brackets:
        if bracket == "(":
            temp.append(bracket)
        elif len(temp) > 0:
                popped = temp.pop()
                pair_count += 1
                
    if len(brackets) / 2 == pair_count:
        return True
    else:
        return False
    
def separate_brackets(u):
    left = 0
    right = 0
    new_brackets = ""
    
    for bracket in u:
        if left > 0 and left == right:
            break
        if bracket == "(":
            left += 1
        elif bracket == ")":
            right += 1
        new_brackets += bracket

    v = u[len(new_brackets):]
    u = new_brackets
    return v, u
    
def make_proper_brackets(u):
    if u == "":
        return ""

    v, u = separate_brackets(u)

    is_proper_buckets = check_proper(u)
    if is_proper_buckets:
        return u + make_proper_brackets(v)
    else:
        middle_brackets = u[1:-1]
        return f"({make_proper_brackets(v)}){reverse_brackets(middle_brackets)}"

def solution(brackets):
    is_proper_buckets = check_proper(brackets)
    
    if is_proper_buckets:
        proper_brackets = brackets
    else:
        proper_brackets = make_proper_brackets(brackets)
        
    return proper_brackets

댓글