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
'Kotlin > Algorithm' 카테고리의 다른 글
Kotlin Permutation(순열) (3) | 2020.12.04 |
---|---|
Kotlin pi, 절댓값, 대소 비교 - PI, abs, max, min (0) | 2020.12.01 |
Kotlin StringBuilder - 문자열 효율적으로 다루기 (0) | 2020.11.30 |
Kotlin 반올림, 올림, 내림 - round, ceil, floor (0) | 2020.11.30 |
Kotlin 제곱, 제곱근 구하기 - sqrt, pow, hypot (0) | 2020.11.29 |