알고리즘💻/스택&큐&덱
BOJ 4949번: 균형잡힌 세상
호프
2021. 1. 31. 19:57
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로 처리해서 처음에 틀렸었다.