Back/Algorithm

Python 백준 9021 괄호

Python 백준 9021 괄호

www.acmicpc.net/problem/9012

 

9012번: 괄호

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

www.acmicpc.net

import sys
input = sys.stdin.readline

n = int(input())

def vps(string):

    stack = []
    for i in string:

        if len(stack) == 0 and i == ')':
            return 'NO'

        if i == '(':
            stack.append(i)

        else:
            if stack[-1] == '(':
                stack.pop()
            else:
                return 'NO'
    if len(stack) == 0:
        return 'YES'
    return 'NO'


for i in range(n):
    word = input().strip()
    print(vps(word))

스택을 이용해서 풀 수 있는 문제다.

 

받은 문자열에서 '(' 은 빈리스트인 stack에 넣어주고,

 

' ( ' 가 올 경우는 2 가지로 나뉜다.

 

stack의 길이가 0일 때 즉 stack에 '('가 들어오지 않았는데 ')'가 올 경우 NO를 return 한다.

 

stack의 -1번쨰 즉 끝부분이 '('인 경우엔 짝이 맞으니 pop으로 stack의 끝 부분을 제거해 주면 되고,

 

그게 아니라면 NO를 return 한다.

 

 

for문이 다 돌고 나서,

 

stack의 길이가 0이면, 짝이 맞는 것이니 YES를 리턴하고,

 

그게 아니라면 NO를 리턴한다.

 

 

마지막 for문은 입력값과 vps함수를 돌리기 위한 코드