문제설명
- 문자열
s
는 다음 3가지 종류의 괄호를 갖는다. '(', ')', '{', '}', '[', ']',
- 괄호가 적절하게 닫혔는지를 판별하라.
문제풀이
- 여는 괄호라면, stack에 넣는다.
- 여는 괄호가 아니라면, stack에서 값을 가져와서 현재 괄호와 비교한다.
- 만약 stack이 비어있다면, 여는 괄호 없이 닫는 괄호가 먼저 나왔다는 것이므로
false
를 리턴한다.
- 주의할점은 swift의 removeLast()가 아닌, popLast()를 사용해야 옵셔널로 반환한다.
func isValid(_ s: String) -> Bool {
let strArray = Array(s)
var stack = [Character]()
for par in strArray {
if isOpenParenthese(par) {
stack.append(par)
} else if !isPairWith(stack.popLast(), par) {
return false
}
}
return stack.isEmpty
}
func isPairWith(_ lhs: Character?, _ rhs: Character?) -> Bool {
guard let lhs = lhs, let rhs = rhs else { return false }
if lhs == "(" && rhs == ")" { return true }
if lhs == "[" && rhs == "]" { return true }
if lhs == "{" && rhs == "}" { return true }
return false
}
func isOpenParenthese(_ par: Character) -> Bool {
if (par == "(" || par == "[" || par == "{") {
return true
} else {
return false
}
}
print(isValid("[()]")) // true
print(isValid("([)]")) // false
print(isValid("()[]{}")) // true
print(isValid("(")) // false
print(isValid("]")) // false