Algorithm / 괄호 회전하기

알고리즘 코드카타

목록 보기
37/59

문제

프로그래머스 / 괄호 회전하기

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
}

결과

profile
이유있는 코드를 쓰자!!

0개의 댓글