알고리즘💻/스택&큐&덱

BOJ 4949번: 균형잡힌 세상

호프 2021. 1. 31. 19:57

www.acmicpc.net/problem/4949

 

4949번: 균형잡힌 세상

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

www.acmicpc.net

아이디어: #스택

이것도 스택의 대표문제인 괄호문제. 오른쪽 괄호인 경우에는 push 하고, 왼쪽 괄호인 경우에는 pop해서 짝이 맞는 지 확인한다. 이때 스택에 남아 있는 괄호가 없다면 오른쪽 괄호가 더 많은 거니까 False이고, 문자열을 모두 돈 후에 스택에 괄호가 남아있다면 왼쪽 괄호가 더 많은 거니까 False이다.

 

import sys
while (True):
    st = sys.stdin.readline().rstrip()
    if (st == '.'):
        break
    stack = []
    flag = True
    for i in st:
        if (i=='(' or i =='{' or i=='['):
            stack.append(i)
        elif (i==')' or i=='}' or i=="]"):
            #스택이 비어있지 않은 경우
            if (len(stack)!=0):  
                p = stack.pop()
                if ((i==')' and p!='(') or (i=='}' and p!='{') or (i==']' and p!='[')):
                    flag = False
                    break
            #스택이 비어있는 경우=짝이 안맞음
            else:
                flag = False
                break
    #왼쪽 괄호가 더 많은 경우
    if (len(stack)!=0):
        flag=False
    if (flag==False): print("no")
    else: print("yes")
        

 

※이 문제는 중간에 문자열이 들어가 있는데, 왼쪽 괄호인 경우를 그냥 else로 처리해서 처음에 틀렸었다.