728x90
문제
https://www.acmicpc.net/problem/9012
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열
괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)
“(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다.
입력으로 주어진 괄호 문자열이 VPS 인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나타내어야 한다.
------------------------------------------------------------------------------------------------------------------
풀이
import sys
def is_valid(s): # 입력한 괄호 리스트를 매개변수로 하는 함수
# (여는 괄호 - 닫힌 괄호) 쌍이므로 올바른 경우는 짝수
# 짝수가 아닌 경우에 'NO'를 출력한 뒤, 함수 종료
if len(s) % 2 != 0:
print('NO')
return
ST = [] # 빈 스택 생성
for c in s:
if c == '(': # 문자가 여는 괄호면 스택에 append
ST.append(c)
else: # 닫는 괄호면 스택에서 pop()
if len(ST) == 0: # 닫는 괄호가 나왔는데 여는 괄호가 없는 경우 'NO'
print('NO')
return
ST.pop()
if len(ST) != 0: # 반복문 이후, 스택이 비어있지 않은 경우 남은 괄호가 존재한다는 것이므로
print('NO') # 'NO'
return
print('YES') # 스택이 비어있는 경우 정상 'YES'
return
T = int(sys.stdin.readline()) # 입력 데이터의 수를 나타내는 정수 T가 주어진다
for _ in range(T):
s = list(sys.stdin.readline().strip()) # 문자열을 입력받은 뒤, 리스트로 변환
is_valid(s)
728x90
'문제 풀이' 카테고리의 다른 글
[백준] 11557번: Yangjojang of The Year - Python(파이썬) (0) | 2024.03.02 |
---|---|
[백준] 18258번: 큐 2 - Python(파이썬) (0) | 2024.02.25 |
[백준] 10773번: 제로 - Python(파이썬) (0) | 2024.02.25 |
[백준] 2644번: 촌수계산 - Python(파이썬) (0) | 2024.02.19 |
[백준] 9610번: 사분면 - Python(파이썬) (0) | 2024.02.18 |