본문 바로가기

알고리즘/프로그래머스

카카오 코딩테스트 2020 괄호 변환, 파이썬

1. 문제

1) 문제에서 주어진 정의에 따라 요구한 순서대로 풀면 된다. 

2) 말 그대로 언어를 프로그래밍 언어로 변환하면 되는 문제이기 때문에 매우 쉬운 문제이다. 

3) 알고리즘은 사실상 완전한 괄호를 찾는 알고리즘(스택이나 Brute force 이용)만 필요. 

 

2. 풀이 

좀 길긴 하지만 누구나 이해하기 쉽게 짰다는 점에서 만족스럽다. 

다만 함수 이름과 변수명에 대해서는 좀 고민이 필요할듯..^^ 

def solution(p):
    answer = ''
    if not p :
        return answer
    while not is_val(p) :
        idx = find_u(p)
        u = p[:idx]
        v = p[idx:]
        if is_val(u) :
            answer += u
            p = v
        else :
            temp_v = solution(v)
            temp_u = change(u[1:-1])
            p = "(" + temp_v + ")" + temp_u 
    answer += p
    return answer

def change(s) :
    answer = ''
    if not s :
        return answer 
    for i in s :
        if i == "(" :
            answer += ")"
        else :
            answer += "("
    return answer

def is_val(p) :
    stack  = []
    for i in p :
        if i == "(" :
            stack.append(i)
        else :
            if not stack :
                return False
            else :
                stack.pop()
    return True

def find_u(p) :
    m = 0
    n = 0
    for i in range(len(p)) :
        if p[i] == "(" :
            m += 1
        else :
            n += 1
        if n == m :
            return i + 1