포스트

40. 문자열 여러 번 뒤집기

나의 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import Foundation

func solution(_ my_string:String, _ queries:[[Int]]) -> String {
    
    var startNum : Int = 0
    var endNum : Int = 0

    var my_String : String = ""
    
    var substring : String = ""
    
    my_String = my_string
    
    for i in 0 ... queries.count-1 {
        startNum = queries[i][0]
        endNum = queries[i][1]
        let range = my_String.index(my_String.startIndex, offsetBy: startNum) ... my_String.index(my_String.startIndex, offsetBy: endNum)
        substring = String(my_String[range].reversed())
        my_String.replaceSubrange(range, with:substring)

    }

    return my_String
}

이렇게 생각한 이유.

reverse를 사용해서 범위의 값을 바꾸려고했다.

하지만 구글의 힘을 빌릴 수 밖에 없었다.

아래 코드를 도움을 받았다.

1
2
3
let range = my_String.index(my_String.startIndex, offsetBy: startNum) ... my_String.index(my_String.startIndex, offsetBy: endNum)
        substring = String(my_String[range].reversed())
        my_String.replaceSubrange(range, with:substring)

다른 코드를 보니 너무 간략하게 했다.

더 열심히 공부해야겠다.

다른코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import Foundation

func solution(_ my_string:String, _ queries:[[Int]]) -> String {
    var my_string = Array(my_string)
    queries.forEach {
        my_string.replaceSubrange($0[0]...$0[1], with: Array(my_string[$0[0]...$0[1]].reversed()))
    }
    return String(my_string)
}

//

import Foundation

func solution(_ my_string:String, _ queries:[[Int]]) -> String {
    var myString = my_string.map { String($0) }
    queries.forEach { q in
        myString[q[0]...q[1]].reverse()
    }
    return myString.joined()
}

//func solution(_ myString: String, _ queries: [[Int]]) -> String {
    queries.reduce(myString) { acc, arr in
        acc.prefix(arr[0]) + String(acc[acc.index(acc.startIndex, offsetBy: arr[0])...acc.index(acc.startIndex, offsetBy: arr[1])].reversed()) + acc.suffix(from: acc.index(acc.startIndex, offsetBy: arr[1] + 1))
    }
}

import Foundation

func solution(_ my_string:String, _ queries:[[Int]]) -> String {

    var s = my_string.map { $0 }

    for q in queries {
        let start = q[0]
        let end = q[1]
        let a = s[start...end].reversed().map { $0 }
        s = s[0..<start] + a + s[end + 1..<s.endIndex]
    }

    return s.map { String($0) }.joined()
}

//
import Foundation

func solution(_ my_string:String, _ queries:[[Int]]) -> String {
    return queries.reduce(into: my_string.map { String($0) }) { result, query in
        let arr = result
        for index in query[0]...query[1] {
            result[index] = arr[query[0] + query[1] - index]
        }
    }.joined()
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.