[Python][백준 9012] 괄호
카테고리: Python Coding Test
태그: coding test 백준 9012 스택 자료구조 python
🔍 괄호 문제 풀이
백준 9012번 괄호 문제의 파이썬 풀이
📝 문제 설명
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(‘ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다.
💡 풀이
이 문제는 스택을 활용하여 괄호의 짝이 맞는지 확인하는 문제이다. 여는 괄호 ‘(‘가 나오면 스택에 추가하고, 닫는 괄호 ‘)’가 나오면 스택에서 하나를 제거한다. 최종적으로 스택이 비어있으면 올바른 괄호 문자열이다.
🔍 코드 설명
- 테스트 케이스의 수 T를 입력받는다.
- 각 테스트 케이스마다:
- 괄호 문자열을 입력받는다.
- 문자열을 순회하면서:
- ’(‘이면 스택에 추가
- ’)’이면 스택이 비어있는지 확인하고 스택에서 제거
- 최종적으로 스택이 비어있는지 확인하여 결과 출력
✨ 참고
- 스택이 비어있을 때 닫는 괄호가 나오면 잘못된 경우이다.
- 모든 문자를 처리한 후 스택에 괄호가 남아있어도 잘못된 경우이다.
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")