6
(())())
(((()())()
(()())((()))
((()()(()))(((())))()
()()()()(()()())()
(()((())()(
3
((
))
())(()
NO
NO
YES
NO
YES
NO
NO
NO
NO
문자열을 index로 접근하는 방식으로 문제를 해결하려고 한다.
항상 (
가 먼저 나와야 하고,
(
의 개수가 )
이상이 되도록 유지를 해야한다.
따라서 )
가 먼저나오거나, 개수가 (
보다 많아지는 경우에는 바로 NO
를 출력해주고,
모든 문자열을 탐색하였을 때 (
의 개수와 )
의 개수가 일치해야 한다.
isValid
라는 함수를 정의하여,
각 문자열의 index를 탐색한다.
(
의 경우 total
값을 1 증가시켜주고,
)
의 경우 total
값을 1 감소시켜줌으로써 (
와 )
의 개수를 파악한다.
def isValid(str) :
length = len(str)
total = 0
for i in range(length) :
if total < 0 :
print("NO")
return -1
if str[i] == '(' :
total += 1
else :
total -= 1
if total == 0 :
print("YES")
return 0
else :
print("NO")
return -1
T = int(input())
for i in range(T) :
isValid(input())