Kotlin 조합(Combination)

Notepad96

·

2020. 12. 5. 05:53

300x250

 

 

 

 

 


1. 조합 (Combination)

 

 

조합 : 서로 다른 n개의 원소 중에서 순서에 상관없이 r개를 선택하는 것

 

ex) a, b, c 가 있을 경우

 

1개 선택 -> (a), (b), (c)

2개 선택 -> (a,b), (a,c), (b,c)

3개 선택 -> (a,b,c)

 

이처럼 조합의 경우의 수를 구할 수 있다.

 

 

 

 


2. 코 드

환경 : Kotlin Version = 1.4.20, JVM

fun <T> combination(answer: MutableList<List<T>>, el: List<T>, ck: Array<Boolean>, start: Int, target: Int) {
    if(target == 0) {
        answer.addAll( listOf(el.filterIndexed { index, t -> ck[index] }) )
    } else {
        for(i in start until el.size) {
            ck[i] = true
            combination(answer, el, ck, i + 1, target - 1)
            ck[i] = false
        }
    }
}

fun main(args: Array<String>) {
    var arr = listOf(1, 2, 3, 4)    // 1. Int
    //var arr = "asdf".toList()   // 2. String

    for(i in 1 .. arr.size) {
        val answer = mutableListOf<List<Int>>()     // 1. Int
        // val answer = mutableListOf<List<Char>>() // 2. String
        println("================$i 개====================")
        combination(answer, arr, Array<Boolean>(arr.size) { false }, 0,  i)
        answer.forEach { println(it) }
    }

}

 

결 과

 

- combination (

answer : 조합의 결과를 저장하는 이중 리스트,

 

el : 조합을 구할 원소들의 집합,

 

ck : 원소 선택 여부를 확인하기 위한 배열,

 

start : 탐색 시작 인덱스,

 

target : 구할 조합의 원소 개수

}

 

 

-> 해당 예시에서는 for문을 이용, target 값을 바꿔가며 1~4개 선택하였을 경우 존재하는 조합의 결과를 출력 한다.

 

 

300x250