Algorithm/Data Structure

[백준] 9012: 괄호 (python 파이썬)

코딩마루 2024. 4. 4. 13:11
 

9012번: 괄호

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

www.acmicpc.net

해당 문제는 괄호가 올바르게 쳐져있는지를 확인하는 문제다. 이는 아래와 같은 원리로 코드를 작성할 수 있다.

  • 괄호가 올바르게 나오는 경우는 '('와 ')'의 개수가 같은 경우다.
  • 단, 개수가 같아도 )(의 경우 올바르지 않은 경우다. 따라서 우리는 수식이 올바른지 판단하기 위한 변수 하나를 선언할 것이다. 단, 초깃값이 0인 변수를 만들고  '('가 나온 경우는 +1, ')'가 나오는 경우는 -1을 더해주자. 해당 코드는 아래와 같이 작동된다.
    • 변수가 -값으로 내려간 순간 해당 수식은 잘못된 수식이다. 괄호가 올바른 형식으로 작성되기 위해서는 무조건 '('가 먼저 나온 후 ')'가 나와야 하기 때문에 숫자가 음수가 될 수 없다. 따라서 이런 경우 탐색을 중지하고 "NO"를 출력한다.
    • 모든 수식을 탐색 후 변숫값이 양수라면, '('가 더 많이 나왔다는 의미이므로 "NO"를 출력한다.
    • 모든 수식을 탐색 후 변숫값이 0이라면 '('와 ')'의 짝이 맞다는 의미로 "YES"를 출력한다.

작성한 코드는 다음과 같다.

import sys
input = sys.stdin.readline

n = int(input())
for _ in range(n):
    formula = input().rstrip()
    
    checkFlag = 0 # VPS인지 체크하기 위한 변수 
    for bracket in formula:
        if bracket == '(':
            checkFlag += 1
        else:
            checkFlag -= 1

        if checkFlag < 0:
            break
    
    if checkFlag == 0:
        print("YES")
    else:
        print("NO")