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로 처리해서 처음에 틀렸었다.
'알고리즘💻 > 스택&큐&덱' 카테고리의 다른 글
BOJ 2504번: 괄호의 값 (0) | 2021.02.01 |
---|---|
BOJ 1021번: 회전하는 큐 (0) | 2021.02.01 |
BOJ 1966번: 프린터 큐 (0) | 2021.01.31 |
BOJ 1158번: 요세푸스 문제 / 파이썬 Queue (0) | 2021.01.31 |
BOJ 1935번: 후위 표기식2 (0) | 2021.01.31 |