Kotlin/프로그래머스-Kotlin

프로그래머스) 잘라서 배열로 저장하기 - Kotlin

주톨 2023. 2. 14. 14:38
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() 함수는 새로운 문자열을 생성하지 않고, 기존의 문자열을 참조하기 때문입니다.