[Level 2] 괄호 회전하기 + Swift

sanghee·2021년 12월 1일
0

🙈코딩테스트

목록 보기
48/52
post-thumbnail

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/76502?language=swift

문제

대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.

입력

let s = "[](){}"

출력

3

문제 풀이

func isCorrect(_ s: String) -> Bool {
    var queue: [Character] = []
    
    for c in s {
        if queue.isEmpty {
            queue.append(c)
        } else {
            guard let last = queue.last else { continue }
            switch last {
            case "[": if c == "]" { queue.removeLast() } else { queue.append(c) }
            case "(": if c == ")" { queue.removeLast() } else { queue.append(c) }
            case "{": if c == "}" { queue.removeLast() } else { queue.append(c) }
            default: queue.append(c)
            }
        }
    }
    
    return queue.isEmpty
}

func solution(_ s: String) -> Int {
    var count = 0
    
    for offset in 0..<s.count {
        let startIndex = s.index(s.startIndex, offsetBy: offset)
        let str = s[startIndex..<s.endIndex] + s[s.startIndex..<startIndex]
        if isCorrect(String(str)) { count += 1 }
    }
    
    return count
}
profile
👩‍💻

0개의 댓글