Algorithm/acmicpc.net

실버 돌아보길 잘했지... 안녕 괄호야 (실버4)

winney916 2022. 2. 25. 11:40
728x90

#4949번 균형잡힌 세상 https://www.acmicpc.net/problem/4949

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마

www.acmicpc.net

처음엔 쉬울거라 생각했지만,... 괄호를 판단하는 방법이 기억이 나지않나 과거 코드를 복기했다.

 

def check(ps_string):
    tmp = ps_string.split("()")
    tmp = "".join(tmp)
    tmp = tmp.split("[]")
    tmp = "".join(tmp)

    if len(tmp) < len(ps_string):
        return check(tmp)
    else:
        if len(tmp) > 0:
            return ("no")
        else:
            return ("yes")


sens = []
while True:
    sen = input()
    if sen == ".":
        break
    sens.append(sen)

for sen in sens:
    ps = ""
    for s in sen:
        if s == "(" or s == ")" or s == "[" or s == "]":
            ps += s
    print(check(ps))

check 부분에 나와있다. 정상적인 괄호로 스플릿 하고 다시 조인하는걸 재귀적으로 반복하면 된다.

재귀 종료 조건은, 스플릿-조인을 진행한 후에 전체 문자열의 길이가 변하지 않은 상황이다.

 

끝!