문제 : https://www.acmicpc.net/problem/9012
문제 풀이 방법
- 앞에서부터 괄호 하나하나 체크해줌
- 현 위치의 괄호가 "("라면 리스트에 추가해줌
- 현 위치의 괄호가 ")"라면 따져봐야할 것이 있음
- 빈 리스트가 아니고 , 리스트의 마지막 요소가 "("라면 리스트에서 "(" pop해서 제거
- 빈 문자열이게되면 빈문자열에 ")"가 나왔다는 거니까 올바른 괄호가 아님. 따라서 빈문자열인 상태에서 ")" 를 append해줘서 빈문자열이 아니게 만듦
- 리스트 길이를 체크해서 0이면 다 pop됐다는 뜻이니까 올바른 괄호로 YES출력
- 리스트 길이를 체크해서 0보다 크다면 남아있는 괄호"(" 또는 추가해준 ")"일 것이므로 올바른 괄호 아님 . NO출력
import sys
T = int(sys.stdin.readline())
for t in range(T):
ps = sys.stdin.readline()
stk =[]
for i in ps:
if i == "(": # 문자열 하나씩 for문 돌려서 보는데 i 가 ( 라면 리스트 stk에 추가한다
stk.append(i)
elif i == ")": # i 가 ( 일 경우에 , 리스트가 빈 리스트가 아니고, 리스트의 마지막 원소값이 ( 일경우에 pop해줌
if len(stk) != 0 and stk[-1] == "(":
stk.pop()
else: # len(stk) == 0 and stk[-1] == ")" 일 경우에는 어차피 빈 리스트에 원소가 )라는 말은 올바른 괄호가 아니라는 말
stk.append(i) # 추가를 해줘서 빈 리스트가 아니도록 만듦 (어차피 올바른 괄호가 아니라서)
if len(stk) == 0 :
print("YES")
elif len(stk) > 0:
print("NO")