관리 메뉴

나만을 위한 블로그

[Algorithm] 프로그래머스 - 배열 자르기 (Kotlin) 본문

알고리즘 문제 풀이/프로그래머스

[Algorithm] 프로그래머스 - 배열 자르기 (Kotlin)

참깨빵위에참깨빵_ 2022. 12. 23. 18:56
728x90
반응형
정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번 인덱스부터 num2번 인덱스까지 자른 정수 배열을 리턴하는 solution()을 완성하라

 

 

배열을 자르는 방법이다. 처음 풀 때 intArray를 자르는 방법을 몰라서 리스트로 변환한 다음 subList()를 써서 배열을 자르고, 그 결과를 다시 intArray로 만드는 번거로운 방식으로 풀었다.

 

class Solution {
    fun solution(numbers: IntArray, num1: Int, num2: Int): IntArray =
        numbers.toList().subList(num1, num2 + 1).toIntArray()
}

 

 

num2를 넣으면 그 이전 인덱스까지만 잘라지고 num2번 인덱스의 숫자는 포함되지 않아서 num2에 1을 더했다.

그런데 굳이 이렇게 귀찮게 작성하지 않아도 풀 수 있는 방법이 분명 있을 것 같다. intArray를 자르는 방법을 찾다 보니 sliceArray()라는 함수를 발견했다.

 

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/slice-array.html

 

sliceArray - Kotlin Programming Language

 

kotlinlang.org

지정된 인덱스에서 이 배열의 요소를 포함하는 배열을 리턴한다

 

이 함수의 원형은 아래와 같다.

 

public fun IntArray.sliceArray(indices: IntRange): IntArray {
    if (indices.isEmpty()) return IntArray(0)
    return copyOfRange(indices.start, indices.endInclusive + 1)
}

 

매개변수로 넣은 intRange의 시작값, 끝값 + 1을 첫 인덱스, 마지막 인덱스로 하는 배열을 복사해서 리턴한다. 복사 처리는 copyOfRange()의 영향으로 일어난다.

이 함수를 사용하면 아래처럼 코드를 작성할 수 있다.

 

class Solution {
    fun solution(numbers: IntArray, num1: Int, num2: Int): IntArray = numbers.sliceArray(num1..num2)
}

 

반응형
Comments