def push(stack, x):
    stack.append(x)
    
def pop(stack):
    return stack.pop()

def top(stack):
    return stack[-1] if stack else -1

while(True):
    sentence = input()
    
    if(sentence == "."):
        break
    else:
        opend_stack = []
        sentence_check = True
        
        for i in sentence:
            if(i == "(" or i == "["):
                push(opend_stack, i)
            elif i == ")":
                if(top(opend_stack) == "("):
                    pop(opend_stack)
                else:
                    if(not opend_stack or top(opend_stack) == "["):
                        sentence_check = False
                        break
            elif i == "]":
                if(top(opend_stack) == "["):
                    pop(opend_stack)
                else:
                    if(not opend_stack or top(opend_stack) == "("):
                        sentence_check = False
                        break

        if(sentence_check and not opend_stack):
            print("yes")
        else:
            print("no")

중간중간 비어있는 스택이나 문제에서 제공된 예제를 전부 통과하고,

마지막에 "((((" 반례정도만 생각해주면 쉽게 해결 가능할 것입니다.

'# 코딩 문제 관련 > 파이썬' 카테고리의 다른 글

백준 2164번(python)  (0) 2020.05.03
백준 18258번(python)  (0) 2020.05.03
백준 10773번(python)  (0) 2020.05.02
백준 2004번(python)  (0) 2020.04.28
백준 1676번(python)  (0) 2020.04.27