[Python][백준 9012] 괄호

Date:     Updated:

카테고리:

태그:

🔍 괄호 문제 풀이

백준 9012번 괄호 문제의 파이썬 풀이

📝 문제 설명

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

💡 풀이

이 문제는 스택을 활용하여 괄호의 짝이 맞는지 확인하는 문제이다. 여는 괄호 ‘(‘가 나오면 스택에 추가하고, 닫는 괄호 ‘)’가 나오면 스택에서 하나를 제거한다. 최종적으로 스택이 비어있으면 올바른 괄호 문자열이다.

🔍 코드 설명

  1. 테스트 케이스의 수 T를 입력받는다.
  2. 각 테스트 케이스마다:
    • 괄호 문자열을 입력받는다.
    • 문자열을 순회하면서:
      • ’(‘이면 스택에 추가
      • ’)’이면 스택이 비어있는지 확인하고 스택에서 제거
    • 최종적으로 스택이 비어있는지 확인하여 결과 출력

✨ 참고

  • 스택이 비어있을 때 닫는 괄호가 나오면 잘못된 경우이다.
  • 모든 문자를 처리한 후 스택에 괄호가 남아있어도 잘못된 경우이다.
  • sys.stdin.readline()을 사용하여 입력 속도를 개선할 수 있다.

📝 코드

import sys

t = int(sys.stdin.readline().strip())
results = []

for _ in range(t):
    input_str = sys.stdin.readline().strip()
    stack = []
    is_valid = True

    for c in input_str:
        if c == '(':
            stack.append(c)
        elif c == ')':
            if not stack:
                is_valid = False
                break
            stack.pop()
    
    if stack:
        is_valid = False

    results.append("YES" if is_valid else "NO")

sys.stdout.write("\n".join(results) + "\n")

Python Coding Test 카테고리 내 다른 글 보러가기