(
와)
개수를 카운트하면서 스택에 넣는다.)
는(
와 개수가 같아야 하며,(
가 스택에 이미 들어 있을 때에만 올바른 괄호로 사용 가능하다.
(
가 있을 때만 )
를 사용할 수 있다. 이때 스택에서 (
을 팝하면서 개수를 맞춰준다.
(
와 )
의 총 개수가 같아야 하는데, )
기준으로 스택에서 팝하기 때문에 마지막에 스택이 비었는지 체크한다.
t = int(input())
for _ in range(t):
stack = []
VPS = True
pars = input()
for par in pars:
if par == '(':
stack.append(par)
# '('는 스택에 계속 넣을 수 있다.
else:
# ')'는 스택에 '('가 담겨 있어야 한다.
if stack: stack.pop(-1)
else:
VPS = False
break
# ')'가 입력될 때 스택에 '('가 없다면 잘못된 괄호 사용
if VPS and stack: VPS = False
# ')'보다 '('가 더 많을 때 잘못된 괄호 사용이므로 VPS는 False로 체크
if VPS: print('YES')
else: print('NO')