LeetCode - The World's Leading Online Programming Learning Platform
백준 포스팅과 프로그래머스 포스팅에서 모두 풀어봤던 문제이다. 다만 차이는 괄호의 종류가 3종류라는 것이다. 괄호의 종류만 매칭하는 부분은 Array의 firstIndex를 사용했다.
class Solution {
func isValid(_ s: String) -> Bool {
// 열린 괄호와 닫힌 괄호 정의
let open = ["(", "{", "["]
let closed = [")", "}", "]"]
// 반복문에 사용할 수 있게 [String]으로 바꾸기
var strings = s.map { String($0) }
// stack 구현
var stack = [String]()
for s in strings {
// 열린 괄호의 경우 stack에 push
if open.contains(s) {
stack.append(s)
continue
}
// 닫힌 괄호의 경우 stack에서 pop한 괄호와 짝이 맞는지 확인
guard let pop = stack.popLast() else { return false }
if open.firstIndex(of: pop)! != closed.firstIndex(of: s)! { return false }
}
// stack에 더 이상 열린 괄호가 없을 때 true 리턴
return stack.isEmpty
}
}