Apple /Algorithm
[Algorithm/Swift] Codility / Brackets
moon_0
2022. 12. 26. 16:31
문제
https://app.codility.com/programmers/lessons/7-stacks_and_queues/brackets/
풀이
[ { ( ) } ] 적절하게 중첩된 문자열인지 체크하는 문제입니다.
가로는 항상 올바르게 중첩이 된 상태여야 합니다.
[ { ( } ) ] 이렇게 되면 짝은 맞지만 올바른 중첩은 아닙니다.
Stack를 이용해서 풀어봅시다.
Code
public func solution(_ S : inout String) -> Int {
var stack:[Character] = []
var valid = true
for i in S {
if i == "[" {
stack.append(i)
} else if i == "{" {
stack.append(i)
} else if i == "(" {
stack.append(i)
} else if i == ")" {
if stack.last == "(" {
stack.popLast()
} else {
valid = false
}
} else if i == "}" {
if stack.last == "{" {
stack.popLast()
} else {
valid = false
}
} else if i == "]" {
if stack.last == "[" {
stack.popLast()
} else {
valid = false
}
}
}
if valid == true {
return 1
} else {
return 0
}
}

왜이러는데,,
역시 코드는 가독성 필수,,,
마지막에 한번 더 체크 !
Code O(N)
public func solution(_ S : inout String) -> Int {
var stack:[Character] = []
var lastCharacter: Character
for i in S {
if i == "[" || i == "{" || i == "(" {
stack.append(i)
} else {
if stack.isEmpty { return 0 }
lastCharacter = stack.popLast()!
if i == "}" && lastCharacter != "{" ||
i == "]" && lastCharacter != "[" ||
i == ")" && lastCharacter != "("
{ return 0 }
}
}
guard stack.isEmpty else {
return 0
}
return 1
}