백준 4949번 : 균형잡힌 세상
난이도 : 실버 4
while True:
s = input()
if s == ".":
break
stack = []
tmp = True
for i in s:
if i == "(" or i == "[":
stack.append(i)
elif i == ")":
if not stack or stack[-1] == "[":
tmp = False
break
elif stack[-1] == "(":
stack.pop()
elif i == "]":
if not stack or stack[-1] == "(":
tmp = False
break
elif stack[-1] == "[":
stack.pop()
if not stack and tmp == True:
print("yes")
else:
print("no")
스택을 이용해서 풀 수 있는 문제입니다. 처음으로 조건을 달아줄 것은 .이 하나만 들어왔을 때 프로그램을 종료하는 것인데요, 이를 if s == ".": break 를 통해서 구현했습니다. 그 뒤로 stack 리스트와 tmp라는 변수를 선언해줍니다. 제가 처음 문제를 풀 때, tmp를 사용하지 않고 구현하려 했었는데, 틀렸다고 떴었습니다. 그래서 tmp를 이용해서 플래그를 세워주었습니다. 이후의 for문 내에서 내용은 열린 괄호가 입력되었을 때는 stack에 넣어주고, 닫는 괄호일 때 조건을 달아서 stack에 들어가있는 열린 괄호들을 pop()시켜주거나 tmp를 False로 바꿔주었습니다. 그런 다음 마지막 조건에서 스택이 비어있고, tmp가 True라면 "yes"를 출력하고 그 외에는 모두 "no"를 출력해줍니다.