fun <T> combination(answer: MutableList<List<T>>, el: List<T>, ck: Array<Boolean>, start: Int, target: Int) {
if (target == 0) {
val subset = el.filterIndexed { index, _ -> ck[index] }
answer.add(subset)
} 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개 선택하였을 경우 존재하는 조합의 결과를 출력 한다.
챰조: https://notepad96.tistory.com/111
728x90
'코테 > 코딩테스트 대비 Kotlin' 카테고리의 다른 글
백준 미로탐색 Kotlin Bfs (0) | 2023.08.20 |
---|---|
프로그래머스 숫자 짝꿍 시간초과 해결 (0) | 2023.08.20 |
Kotlin 두 개의 배열의 요소가 같은지 아는 방법 (0) | 2023.08.19 |
Kotlin 배열 자르기 (0) | 2023.08.19 |
Kotlin에서 배열을 n개로 나누기 (0) | 2023.08.19 |