괄호 문제 (뭔가 짝을 맞추어야 하는 모든 문제)는 전형적인 Stack 문제입니다. 여는 괄호가 들어오면 push, 닫는 괄호가 들어오면 pop이 원칙입니다. false를 리턴해야 하는 상황은 아래 3가지 입니다.
이외의 상황에는 모두 true를 리턴하면 됩니다.
import Foundation
func solution(_ s:String) -> Bool {
var stack = [Character]()
for p in s {
if p == "(" {
stack.append(p)
} else {
guard let _ = stack.popLast() else { return false }
//👉 1. pop 해야하는데 stack이 빈 경우
}
}
return stack.isEmpty ? true : false
//👉 문자열을 모두 순회했는데 stack이 비어있지 않은 경우
}