본문 바로가기

프로그래머스 (Swift)/기초

[Day8-5] 문자열 여러 번 뒤집기

문제

 

내 정답 코드

import Foundation

func solution(_ my_string:String, _ queries:[[Int]]) -> String {
    
    let startIndex = my_string.startIndex
    let endIndex = my_string.endIndex
    var result = my_string
    
    for query in queries {
        let (s, e) = (query[0], query[1])
        
        let prefix = result.prefix(upTo: result.index(startIndex, offsetBy: s))
        let suffix = result.suffix(from: result.index(startIndex, offsetBy: e+1))
        
        var middle = result[result.index(startIndex, offsetBy: s)..<result.index(startIndex, offsetBy: e+1)]
        var middle2 = ""
        
        for i in (0..<middle.count).reversed() {
            middle2 += String(middle[middle.index(middle.startIndex, offsetBy: i)])
        }
        result = String(prefix) + String(middle2) + String(suffix)
    }
    
    return result
}

 

#

1. String index를 활용해서 요상한 방법으로 해결했는데..

2. var my_string = my_string.map { String($0) } 이 코드를 통해 문자열의 인덱스에 쉽게 접근할 수 있다는 것을 알았다. (이걸 왜 이제 알았지..)
Map함수를 통해 my_string의 문자들을 새로운 문자열 배열에 담음으로써 정수로 접근할 수 있는 것이다.

따라서 그 방법을 적용하여 빠르게 코드를 다시 짜보았다.

 

import Foundation

func solution(_ my_string:String, _ queries:[[Int]]) -> String {
    
    var my_string = my_string.map { String($0) }
    
    for query in queries {
        let (s, e) = (query[0], query[1])
        
        my_string[s...e].reverse()
    }
    
    return my_string.joined()
}

 

1. 필요한 s, e범위를 뒤집어주고

2. 문자열 배열인 my_string을 joined해주면 간단하게 해결할 수 있다.


배운 기술