백준 문제풀이/자료구조

[백준] 9012 괄호 -python

peach_h 2023. 1. 27. 13:32

https://www.acmicpc.net/problem/9012

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

내가 처음에 짠 코드

n = int(input())

for i in range(n):
    x = list(input())
    l_cnt = 0
    r_cnt = 0
    for i in range(len(x)):
        if x[i] == '(':
            l_cnt += 1
        else : 
            r_cnt += 1
    if l_cnt == r_cnt :
        if x[-1] == ')':
            print('YES')
    else :
        print('NO')

그냥 단순하게 ( ) 의 개수가 같은지, 끝이 )로 끝나는지만 체크함.

테스트케이스 1은 잘 돌아갔는데, 2에서  ())(()에 걸려버렸다.

 

어떻게하지 고민했는데 stack을 이용하면 쉬운거였음

(가 들어올때마다 stack에 쌓고, )가 들어오면 pop으로 빼기

 

for - else문을 활용하여 두가지 조건을 걸고 풀었다.

1. 반복문이 다 돌았는데, stack이 비어있으면 YES / 아니면 NO

2. stack 안에 들어있는 (가 없는데 ) 가 들어와서 pop해야 하면 NO

 

n = int(input())

for i in range(n):
    x = list(input())
    stack = []
    for i in range(len(x)):
        if x[i] == '(':
            stack.append(x[i])
        else :
            if len(stack) != 0:
                stack.pop()
            else :
                print('NO')
                break
    else : 
        if len(stack) == 0:
            print('YES')
        else :
            print('NO')

'백준 문제풀이 > 자료구조' 카테고리의 다른 글

[백준] 2493 탑 - python  (0) 2023.01.27
[백준] 1874 스택수열 - python  (0) 2023.01.27
[백준] 10828 스택 -python  (0) 2023.01.27
[백준] 2164 카드2 -python  (0) 2023.01.27
[백준] 1158 요세푸스 문제 - python  (0) 2023.01.25