Input : 6
(())())
(((()())()
(()())((()))
((()()(()))(((())))()
()()()()(()()())()
(()((())()(
Output : NO
NO
YES
NO
YES
NO
Example 2:
Input : 3
((
))
())(()
Output : NO
NO
NO
풀이
t = int(input())
for _ in range(t):
str = input()
check = 0 # YES 0 / NO 1
myStack = []
for i in range(len(str)):
if str[i] == '(':
myStack.append(str[i])
else:
if len(myStack) == 0:
check = 1
break
else:
myStack.pop()
if check == 1 or len(myStack) != 0:
print("NO")
else:
print("YES")
- 올바른 괄호 문자열인지 판단하기 위해 스택을 활용하여 확인한다.
- 괄호를 저장하기 위한 스택을 생성하고, '(' 여는 괄호인 경우 스택에 추가한다.
- 닫는 괄호인 경우 스택이 비어있으면 대응되는 여는 괄호가 없으므로 NO에 해당하는 1을 설정하고, 여는 괄호가 있다면 스택에서 제거한다.
- 반복문이 종료된 후 check가 1이거나 스택에 괄호가 남아있다면 NO를 출력하고, 그렇지 않으면 YES를 출력한다.