class Solution {
fun solution(my_string: String, queries: Array<IntArray>): String {
var result = my_string
queries.forEachIndexed{ i, v->
val change = result.substring(queries[i][0], queries[i][1] + 1).reversed()
result = result.replaceRange(queries[i][0], queries[i][1] + 1, change)
}
return result
}
}
class Solution {
fun solution(my_string: String, queries: Array<IntArray>): String {
var answer = my_string
queries.forEach { (s, e) ->
answer = answer.slice(0 until s) + answer.slice(s..e)
.reversed() + answer.slice(e+1..answer.lastIndex)
}
return answer
}
}
forEach()
val numbers = listOf(1, 2, 3)
numbers.forEach { println(it) }
// 출력: 1, 2, 3
slice()
val str = "Hello, World"
println(str.slice(0..4)) // "Hello"
println(str.slice(7..11)) // "World"
substring()
val str = "Hello, World"
println(str.substring(0, 5)) // "Hello"
replaceRange()
val str = "Hello, World"
val newStr = str.replaceRange(7, 11, "Kotlin")
println(newStr) // "Hello, Kotlin"
reversed()
val str = "Hello"
println(str.reversed()) // "olleH"
특성 | substring() | slice() |
---|---|---|
범위 포함 여부 | 끝 인덱스 포함하지 않음 | 끝 인덱스 포함 |
인덱스 지정 방식 | substring(startIndex, endIndex) | slice(startIndex..endIndex) (또는 여러 인덱스 사용 가능) |
범위 처리 | 끝 인덱스가 시작 인덱스보다 작으면 두 인덱스를 교환하여 처리 | 주어진 범위를 그대로 처리 |
slice()
가 더 적합하게 사용된 것 같다.
이유는 끝 인덱스를 포함하여 문자열을 추출하는 것이 substring()
보다 더 직관적이다. substring()
은 끝 인덱스를 포함하지 않기 때문에 +1을 추가해야 하는데, slice()
는 인덱스를 정확하게 처리하기 때문에 별다른 조정 없이 범위 내의 모든 문자를 그대로 처리할 수 있기 때문이다.
ios랑 겹치는 메서드가 있는게 신기해요 ㅎㅎ