알고리즘/Python

[백준/Python] 9012번: 괄호

_SIHA_ 2022. 1. 25. 18:15

📖  문제 링크

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

 

9012번: 괄호

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

www.acmicpc.net

 

👩‍💻  문제풀이

 

문자열을 입력받고 짝을 맞춰주면 되는 문제이다. 

본 문제에서는 각 괄호의 방향에 따라 sum에 +1과 -1을 해주었는데, 

여기서 나는 조건을 하나 빠뜨려 계속 다른 결과가 나왔다. 

 

'괄호'는 말 그대로 '괄호'이기에, 꼭 ( ) 모양의 쌍으로 이뤄져야 하며, )( 이런식으로 전 후 모양이 바뀌면 안 된다. 

그렇기에 그저 카운트를 올리고 내리며 0을 맞추는 것이 아니라, 방향까지 고려해야한다는 사실! 

 

괄호는 언제나 ( 모양이 먼저 오기 때문에, ) 모양이 먼저 올 경우 sum은 무조건 -1이 될 것이다. 

입력 ( ) ) ( ( )
sum 1 0 -1 0 1 0

위의 표에서 볼 수 있듯, 쌍이 이뤄지지 않아도 갯수가 맞는 경우가 있다. 

)가 먼저 들어오면 -1이 되므로 조건을 추가해주면 해결된다.

 

나머지 경우는 반복문을 모두 돌고 난 후 sum의 결과를 확인한다. 

 

 

  최종 코드

n = int(input())

for i in range(n):
    vps = list(input())
    sum = 0
    for j in range(len(vps)):        
        if vps[j] == '(' :
            sum += 1
        elif vps[j] == ')':
            sum -= 1
        if sum < 0:
            print('NO')
            break
    
    if sum > 0:
        print('NO')
    elif sum == 0:
        print('YES')