Today I Learn

[Kotlin] 2차원 배열을 1차원으로 정리하는 방법s

SeungYong.Lee 2024. 7. 23. 21:51
반응형

2차원 배열을 1차원으로 정리하는 방법들을 정리해 봤습니다.

코테에서도 많이 활용되는 부분입니다.

 

- 중첩된 for 루프를 사용하여 변환하기

fun flattenArray(twoDArray: Array<IntArray>): IntArray {
    val rows = twoDArray.size
    val cols = twoDArray[0].size
    val oneDArray = IntArray(rows * cols)
    var index = 0

    for (i in 0 until rows) {
        for (j in 0 until cols) {
            oneDArray[index++] = twoDArray[i][j]
        }
    }
    return oneDArray
}

fun main() {
    val twoDArray = arrayOf(
        intArrayOf(1, 2, 3),
        intArrayOf(4, 5, 6),
        intArrayOf(7, 8, 9)
    )

    val oneDArray = flattenArray(twoDArray)
    println(oneDArray.joinToString(", "))  // Output: 1, 2, 3, 4, 5, 6, 7, 8, 9
}

 

- flatMap을 사용하여 변환하기

fun flattenArray(twoDArray: Array<IntArray>): IntArray {
    return twoDArray.flatMap { it.toList() }.toIntArray()
}

fun main() {
    val twoDArray = arrayOf(
        intArrayOf(1, 2, 3),
        intArrayOf(4, 5, 6),
        intArrayOf(7, 8, 9)
    )

    val oneDArray = flattenArray(twoDArray)
    println(oneDArray.joinToString(", "))  // Output: 1, 2, 3, 4, 5, 6, 7, 8, 9
}

inline fun <T, R> Iterable<T>.flatMap(transform: (T) -> Iterable<R>): List<R>

 

- reduce를 사용하여 변환하기

첫 번째 배열을 초기 값으로 하여 그다음의 배열을 이어서 더해줍니다.

fun flattenArray(twoDArray: Array<IntArray>): IntArray {
    return twoDArray.reduce { acc, intArray -> acc + intArray }
}

fun main() {
    val twoDArray = arrayOf(
        intArrayOf(1, 2, 3),
        intArrayOf(4, 5, 6),
        intArrayOf(7, 8, 9)
    )

    val oneDArray = flattenArray(twoDArray)
    println(oneDArray.joinToString(", "))  // Output: 1, 2, 3, 4, 5, 6, 7, 8, 9
}

inline fun <S, T : S> Iterable<T>.reduce(operation: (acc: S, T) -> S): S

 

- flatten을 사용하여 변환하기

flatten은 Array <Array <Int>> 형태를 List <Int>로 변환하는 경우에만 사용할 수 있습니다.

fun flattenArray(twoDArray: Array<IntArray>): List<Int> {
    return twoDArray.map { it.toList() }.flatten()
}

fun main() {
    val twoDArray = arrayOf(
        intArrayOf(1, 2, 3),
        intArrayOf(4, 5, 6),
        intArrayOf(7, 8, 9)
    )

    val oneDList = flattenArray(twoDArray)
    println(oneDList.joinToString(", "))  // Output: 1, 2, 3, 4, 5, 6, 7, 8, 9
}

 

반응형