(와)개수를 카운트하면서 스택에 넣는다.)는(와 개수가 같아야 하며,(가 스택에 이미 들어 있을 때에만 올바른 괄호로 사용 가능하다.
(가 있을 때만 )를 사용할 수 있다. 이때 스택에서 (을 팝하면서 개수를 맞춰준다.
(와 )의 총 개수가 같아야 하는데, ) 기준으로 스택에서 팝하기 때문에 마지막에 스택이 비었는지 체크한다.
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')