07_올바른 괄호 문자열 만들기_카카오 문제
Python/알고리즘공부

07_올바른 괄호 문자열 만들기_카카오 문제

728x90

이번 문제는 문제와 구현방법이 나타나 있는 문제였다. 사실 아직까지도 왜 마지막에 첫번째와 마지막 문자를 제거한다음에 괄호를 제거하는지는 잘 이해가 되지 않는다 ㅠㅠ 조금더 이러한 문제들을 많이 풀어본 후에 꼭 다시풀어봐야할 문제인 것 같다. 다만, 이 순서를 따라서 코드를 구현하는거 자체는 어느정도 이해했다. 

 

차분하게 1번부터 차근차근 구현한다면 설령 이해를 잘 못하더라도 충분히 풀 수 있는 문제였다.

사실 4-4단계빼고는 다 잘 이해한것 같다.

 

from collections import deque

balanced_parentheses_string = "()))((()"

def is_correct_parenthesis(string):
    stack = []
    for s in string:
        if s == '(':
            stack.append(s)
        elif stack:
            stack.pop()
    return len(stack) == 0

def separate_to_u_v(string):
    queue = deque(string)
    left, right = 0, 0
    u, v = "", ""
    while queue:
        char = queue.popleft()
        u += char
        if char == "(":
            left += 1
        else:
            right += 1
        if left == right:
            break
    v = ''.join(list(queue))
    return u,v

def reverse_parenthesis(string):
    reversed_string = ""
    for char in string:
        if char == '(':
            reversed_string += ')'
        else:
            reversed_string += '('
    return reversed_string


def change_to_correct_parenthesis(string):
    if string == "":
        return ""
    u,v = separate_to_u_v(string)
    if is_correct_parenthesis(u):
        return u+change_to_correct_parenthesis(v)
    else :
        return "(" + change_to_correct_parenthesis(v) +")" +reverse_parenthesis(u[1:-1])








def get_correct_parentheses(balanced_parentheses_string):
    if is_correct_parenthesis(balanced_parentheses_string):
        return balanced_parentheses_string
    else:
        return change_to_correct_parenthesis(balanced_parentheses_string)






print(get_correct_parentheses(balanced_parentheses_string))  # "()(())()"가 반환 되어야 합니다!

 

728x90