알고리즘/백준

[파이썬] BOJ_9012(괄호)

딱따구르리 2023. 6. 26. 08:29
728x90
반응형

 

 

 

문제

 

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

 

9012번: 괄호

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

www.acmicpc.net


 

해설

 

반응형

 

처음엔 아무 생각 없이 '('의 개수와 ')'의 개수를 세서 같으면 YES, 다르면 NO를 출력했었는데

그러면 안된다.

')'이 '('보다 먼저 있으면 괄호가 제대로 닫기지 않기 때문이다.

 

짝을 맞춰보려면 '('이 나왔을 경우 스택에 넣어주고

')'이 나오면 스택에 들어있던 '('을 pop해준다.

대신 스택에 아무것도 없는데 ')'이 나오면 더이상 볼 것도 없이 NO를 출력해주면 된다.

문자열의 끝까지 반복문을 돌고 났을 때 스택에 아무것도 남아있지 않다면

모든 괄호가 정확히 닫겼다고 보면 된다.

 

이 문제는 sys.stdin.readline()으로 풀면 뒤에 개행문자가 들어가서 제대로 된 값이 나오지 않는다.

개행문자를 제거하고 풀든지, 아니면 input()으로 풀어야 한다.


코드

 

-파이썬

#백준 9012(괄호)

n = int(input())

for i in range(n):
    stack = []
    ps = input()
    for i in ps:
        if i == '(':
            stack.append(i)
        else:
            if stack:  #스택에 '('가 들어있음
                stack.pop()
            else:  #스택에 아무것도 없음
                print("NO")
                break
    else:
        if not stack:  #스택에 아무것도 없음
            print("YES")
        else:
            print("NO")

 

 

 

 

728x90
반응형