스택을 만들어 removeFirst 를 사용하여 해결해도 되지만 인덱스를 사용하여 해결하는 방법이 성능적으로 뛰어납니다.

removeFirst 를 사용하면 모든 인덱스가 계속해서 메모리 내부의 주소값을 바꿔줘야하는 리스트를 감수하지 않는 편이 좋습니다.

 

func solution(_ s:String) -> String {
    
    let s = s.map { String($0) }
    var stack: [String] = []
    var index = 0
    
    while index < s.count {
        if s[index] == " " {
            stack.append(s[index])
            index += 1
        } else {
            stack.append(s[index].uppercased())
            index += 1
            while index < s.count && s[index] != " " {
                stack.append(s[index].lowercased())
                index += 1
            }
        }
    }
    return stack.joined()
}
ytw_developer