문제
프로그래머스 / 괄호 회전하기
1) 문제 풀이
let rotated = Array(sArray[i..<n] + sArray[0..<i])를 통해 문자열 회전
isValid(_:)를 통해 올바른 값인지 검수
- Stack 구조를 사용하여 Stack의 마지막 값과 현재 값이 한 쌍인지 확인
- 문자열의 순회를 돈 후 Stack에 값이 비어 있으면 올바른 값
func solution(_ s:String) -> Int {
func isValid(_ chars: [Character]) -> Bool {
var stack: [Character] = []
for ch in chars {
if ch == "(" || ch == "[" || ch == "{" {
stack.append(ch)
} else {
guard let last = stack.last else { return false }
if (ch == ")" && last == "(") ||
(ch == "]" && last == "[") ||
(ch == "}" && last == "{") {
stack.removeLast()
} else {
return false
}
}
}
return stack.isEmpty
}
let sArray = Array(s)
let n = sArray.count
var count = 0
for i in 0..<n {
let rotated = Array(sArray[i..<n] + sArray[0..<i])
if isValid(rotated) {
count += 1
}
}
return count
}
결과
