

문제를 살펴보면 괄호의 상태가 올바른지 확인하면 되는 코드다
여는 괄호가 존재한다면 닫는 괄호가 그 개수만큼 존재해야한다 그렇다고 존재만 해선 안되고 순서가 잘 맞아야한다
예를 들어 (()))( 와 같은 경우 개수는 동일하지만 순서가 다르므로 옳지 않은 괄호 상태이다
일단 문제를 풀기 위해 하나의 리스트를 선언하고, 입력받은 괄호들을 리스트로 저장하여 총 두 개의 리스트를 생성하였다
또한 balanced 변수에 True를 저장하여 마지막에 괄호 상태에 대해 출력하기 편하게 하였다
그리고 for 문을 통해 처음부터 확인하며 만약 리스트의 문자열이 '('라면 스택 리스트에 추가하고,
')'라면 스택이 비어있지 않을 때 pop을 통해 여는 괄호를 꺼내준다
만약 닫는 괄호가 리스트에 있는데 스택이 비어있다면 이는 잘못된 경우이므로 break문을 통해 멈춤과 동시에
False를 선언하여 현재의 괄호 상태가 적절하지 않다는 것을 balanced 변수에 저장해준다
마지막에는 스택을 비워주어야한다
n번을 반복하는 동안 stack 리스트에 수많은 괄호들이 들어가고 빠져나갈텐데,
새로운 문자열을 받을때마다 초기화를 해주어야 뒤의 코드에 문제가 발생하지 않는다
stack.clear()를 통해 스택을 초기화해주면 된다
import sys
stack = []
n = int(input())
for _ in range(n):
String = list(sys.stdin.readline().strip())
balanced = True
for s in String:
if s == '(':
stack.append(s)
elif s == ')':
if stack:
stack.pop()
else:
balanced = False
break
if balanced and not stack:
print('YES')
else:
print('NO')
stack.clear()
'Baekjoon' 카테고리의 다른 글
| [Baekjoon]백준 12789 도키도키 간식드리미(실버 3) - Python (0) | 2024.11.27 |
|---|---|
| [Baekjoon]백준 4949 균형잡힌 세상(실버 4) - Python (0) | 2024.11.26 |
| [Baekjoon]백준 10773 제로(실버 4) - Python (0) | 2024.11.24 |
| [Baekjoon]백준 28278 스택2(실버 4) - Python (0) | 2024.11.23 |
| [Baekjoon]백준 13909 창문 닫기(실버 5) - Python (0) | 2024.11.22 |