728x90
문제 설명
문자열 my_str과 n이 매개변수로 주어질 때, my_str을 길이 n씩 잘라서 저장한 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ my_str의 길이 ≤ 100
- 1 ≤ n ≤ my_str의 길이
- my_str은 알파벳 소문자, 대문자, 숫자로 이루어져 있습니다.
입출력 예
입출력 예 설명
입출력 예 #1
- "abc1Addfggg4556b" 를 길이 6씩 잘라 배열에 저장한 ["abc1Ad", "dfggg4", "556b"]를 return해야 합니다.
입출력 예 #2
- "abcdef123" 를 길이 3씩 잘라 배열에 저장한 ["abc", "def", "123"]를 return해야 합니다.
유의사항
입출력 예 #1의 경우 "abc1Addfggg4556b"를 길이 6씩 자르면 "abc1Ad", "dfggg4" 두개와 마지막 "556b"가 남습니다. 이런 경우 남은 문자열을 그대로 배열에 저장합니다.
나의 풀이
class Solution {
fun solution(my_str: String, n: Int): MutableList<String> {
var answer = mutableListOf<String>()
for (i in 0 until my_str.length step (n)) {
if (my_str.length >= i + n) {
answer.add(my_str.substring(i, i + n))
} else {
answer.add(my_str.substring(i))
}
}
return answer
}
}
AI 리팩토링 코드
fun solution(my_str: String, n: Int): List<String> {
lateinit var answer: MutableList<String>
var startIndex = 0
var endIndex = n.coerceAtMost(my_str.length)
while (startIndex < my_str.length) {
if (!::answer.isInitialized) {
answer = mutableListOf()
}
answer.add(my_str.subSequence(startIndex, endIndex).toString())
startIndex = endIndex
endIndex += n
endIndex = endIndex.coerceAtMost(my_str.length)
}
return answer
}
문자열을 분할할 때 substring() 함수를 사용하면 새로운 문자열을 할당하게 됩니다. 이 경우, 불필요한 메모리 할당이 발생할 가능성이 있습니다. 이를 개선하려면, substring() 대신 subSequence() 함수를 사용할 수 있습니다. subSequence() 함수는 새로운 문자열을 생성하지 않고, 기존의 문자열을 참조하기 때문입니다.
'Kotlin > 프로그래머스-Kotlin' 카테고리의 다른 글
[프로그래머스] 문자열 정렬하기 (2) - Kotlin (0) | 2023.02.17 |
---|---|
[프로그래머스] 7의 개수 - Kotlin (0) | 2023.02.14 |
프로그래머스) 문자열 밀기 - Kotlin (0) | 2023.02.14 |
프로그래머스) 종이 자르기 - Kotlin (0) | 2023.02.13 |
프로그래머스) 연속된 수의 합 - Kotlin (0) | 2023.02.13 |