Stack(Push,POP)을 이용한 문제이다.
풀이 : 올바른 괄호가 되어야만 YES 그렇지 않으면 No를 출력하는 문제이다. 즉 배열에다 (가 들어오면 Push )가 들어오면 POP을 하여 올바른 괄호가 되면 스택이 비어있어야 한다. 예외로 ))로 들어오는 경우 처음에 )이 배열에 들어오고 나서 )을 POP 해버리면 빈 배열이 되기 때문에 YES가 출력된다. 또 POP을 하기 전에 배열이 빈 배열인지 확인을 해야 한다!!! 만약 배열이 비어있는데 POP을 하면 오류가 나기 때문이다.
느낀점 : 처음에는 "(" 문자열과")"문자열을 하나씩 Counting 하여 같으면 true 다르면 false로 하였는데 그렇게 하면 안 된다!! 왜냐하면 x가 VPS라면 이것을 하나라고 쳐야 하기 때문이다. VPS = () 즉 Counting은 "("와")" 별개로 보기 때문에 안된다!!
var T = Int(readLine()!)!
var stack:[String.Element] = []
for _ in 0..<T {
var breack = readLine()!
for i in breack {
if i == "(" || stack.last == ")" {
stack.append(i)
} else {
if !stack.isEmpty {
stack.popLast()
} else {
stack.append(i)
}
}
}
if stack.isEmpty {
print("YES")
stack = []
} else {
print("NO")
stack = []
}
}