내 맴

[ BAEKJOON ] No. 9012 괄호 본문

Algorithm/Baekjoon 문제풀이

[ BAEKJOON ] No. 9012 괄호

뺙사우르수 2020. 4. 3. 17:14
728x90

문제 )

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

 

9012번: 괄호

문제 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(conc

www.acmicpc.net

 

[ 풀이 ]

  stack을 사용해서 문제를 풀어주기 

또한 , ' ( ' 는 -1이라고 하고 ,  ' ) ' 는 1이라고 설정하고 문제를 푼다. 



< checkVPS Function >

" ( " : -1  ,       " ) " : 1


1 ) 받은 문자열을 list로 만들어준다 (여기서 list는 stack을 의미한다)
2 ) list에 있는 문자들을 뒤에서부터 꺼내면서( pop ) 합해준다. 
    2-1 ) 이때, 합 < 0이 되면 →  ")"보다 "("가 더 많다는거 의미한다
            ' NO' 반환
3 ) list 모든 값들의 합 = 0 인 경우에만 YES반환
     나머지 경우에는 모두 NO반환

 

- python code

# '(' : -1 ,    ')' :1
def checkVPS(string):
    stack=list(string) #str을 list로 만들어주기
    sumnum=0
    while len(stack)>0: #list가 빌때까지 반복
        string=stack.pop() 
        if string==')':
            sumnum+=1
        elif string=='(':
            sumnum-=1
        # 합이 음수이면 → 짝이 안맞음을 의미 
        if sumnum<0:
            return "NO"
        
    if sumnum==0:
        return "YES"
    else: return "NO"


T=int(input())
for i in range(T):
    stack=input()
    result= checkVPS(stack)
    print(result)

 

 

 

728x90