Mac Plus

Hello Swift

프로그래머스 쇠막대기(Swift)

문제 해설
  • 그림때문에 복잡하다고 느껴졌는데 생각보다 단순하게 해결이 가능하다. () 레이저를 다른 문자로 대체해주고 ‘(‘ 값과 ‘)’ 값만 비교해주면 된다.
  • ’-‘ 레이저를 만나면 stack에 들어있는 파이프 갯수만큼 + 시켜주고 ‘)’ 파이프가 끝나면 막대기 갯수를 +1 해주면서 stack에서 하나 빼주면된다.
func solution(_ arrangement:String) -> Int {
     let str = arrangement.replacingOccurrences(of: "()", with: "-")
    let arr = Array(str)

    var stack: [Int] = []
    var sum = 0

    for i in 0..<arr.count {
        if arr[i] == "-" {
            sum += stack.count
        } else if arr[i] == "(" { //(
            stack.append(0)
        } else { //)
            sum += 1
            stack.removeFirst()
        }
    }

    return sum
}