본문 바로가기

Baekjoon

[Baekjoon]백준 9012 괄호(실버 4) - Python

문제설명
예제

문제를 살펴보면 괄호의 상태가 올바른지 확인하면 되는 코드다

여는 괄호가 존재한다면 닫는 괄호가 그 개수만큼 존재해야한다 그렇다고 존재만 해선 안되고 순서가 잘 맞아야한다

예를 들어 (()))( 와 같은 경우 개수는 동일하지만 순서가 다르므로 옳지 않은 괄호 상태이다

 

일단 문제를 풀기 위해 하나의 리스트를 선언하고, 입력받은 괄호들을 리스트로 저장하여 총 두 개의 리스트를 생성하였다

또한 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()