Stack
& Queue
{[()()]}
는 nested → 1([)()]
는 nested(X) → 0(
, {
, [
, ]
, }
, )
만 가짐charArray
로 변경{
, [
, (
이면 stack에 넣음public func solution81(_ S : inout String) -> Int {
let charArray = Array(S)
var stack: [Character] = []
let count = charArray.count
var topChar: Character
// 홀수이거나 엘레멘트가 없을 때 리턴 0
if count % 2 != 0 || count == 0 {
return 0
}
for char in charArray {
if char == "{" || char == "[" || char == "(" {
stack.append(char)
} else {
// 짝을 이루어야 할 원소가 남아있는데 stack이 비어있으면 0을 리턴(짝이 안맞는 것이므로)
if stack.isEmpty { return 0 }
topChar = stack.popLast()!
if char == "}" && topChar != "{" ||
char == "]" && topChar != "[" ||
char == ")" && topChar != "(" {
return 0
}
}
}
return 1
}
// empty string일 때 1리턴
if count == 0 {
return 1
}
// 짝이 맞지 않았을 때 0 리턴
if !stack.isEmpty {
return 0
}
public func solution(_ S : inout String) -> Int {
let charArray = Array(S)
var stack: [Character] = []
let count = charArray.count
var topChar: Character
// empty string일 때 1 리턴
if count == 0 {
return 1
}
// 홀수일 때 0 리턴
if count % 2 != 0 {
return 0
}
for char in charArray {
if char == "{" || char == "[" || char == "(" {
stack.append(char)
} else {
if stack.isEmpty { return 0 }
topChar = stack.popLast()!
if char == "}" && topChar != "{" ||
char == "]" && topChar != "[" ||
char == ")" && topChar != "(" {
return 0
}
}
}
if !stack.isEmpty {
return 0
}
return 1
}