[프로그래머스/Level2] 괄호 변환(Python)

SeokHyun·2022년 7월 16일
0

프로그래머스

목록 보기
23/32

문제 링크:https://school.programmers.co.kr/learn/courses/30/lessons/60058

문제 접근

문제 설명은 하나 빼고 다 잘 쓰여져 있다.

4-4. u의 첫 번째와 마지막 문자를 제거하고, 나머지 문자열의 괄호 방향을 뒤집어서 뒤에 붙입니다.

이 설명때문에 좀 오래걸렸다...

  • )()) -> ))() (X)
  • )()) -> ()(( (O)

문자 순서를 바꾸는 것이 아니라 각 괄호 하나하나 방향을 바꾸는 것이다.

소스코드

def solution(s: str):
    return changeBracket(s)


def changeBracket(s: str):
    if s == "":
        return ""

    u, v = "", ""
    for i in range(2, len(s) + 1, 2):
        if isBalance(s[:i]):
            u, v = s[:i], s[i:]
            break

    if isRight(u):
        v = changeBracket(v)
        return u + v
    else:
        blank = "(" + changeBracket(v) + ")"
        reverseU = "".join(map(lambda x: ")" if x == "(" else "(", u[1:len(u) - 1]))
        return blank + reverseU


def isBalance(s: str):
    return s.count("(") == s.count(")")


def isRight(s: str):
    rightBracket = "()"
    closeBracket = ")"

    ls = list(s)
    stack = []

    while ls:
        bracket = ls.pop(0)

        if bracket == closeBracket:
            if stack == []:
                return False
            else:
                if (stack.pop() + bracket) != rightBracket:
                    return False
        else:
            stack.append(bracket)

    return stack == []
profile
SI를 넘어 백엔드 엔지니어를 향하여

0개의 댓글