코딩테스트 준비(kotlin)/완전탐색

[프로그래머스,kotlin] 소수 찾기

1chanhue1 2024. 7. 12. 19:52

import kotlin.math.sqrt

fun solution(numbers: String): Int {
    // 주어진 문자열의 모든 가능한 순열을 생성하는 함수
    fun generatePermutations(chars: List<Char>): Set<Int> {
        val results = mutableSetOf<Int>()
        fun permute(prefix: String, remaining: String) {
            if (prefix.isNotEmpty()) {
                results.add(prefix.toInt())
            }
            for (i in remaining.indices) {
                permute(prefix + remaining[i], remaining.substring(0, i) + remaining.substring(i + 1))
            }
        }
        permute("", chars.joinToString(""))
        return results
    }

    // 소수 판별 함수
    fun isPrime(num: Int): Boolean {
        if (num < 2) return false
        for (i in 2..sqrt(num.toDouble()).toInt()) {
            if (num % i == 0) return false
        }
        return true
    }

    // 문자열을 리스트로 변환하여 모든 가능한 순열 생성
    val chars = numbers.toList()
    val permutations = generatePermutations(chars)

    // 생성된 숫자 중 소수를 찾아서 카운트
    val primeCount = permutations.count { isPrime(it) }

    return primeCount
}