TLI/코드카타

2024.06.27 TIL 코트카타 95번(k진수에서 소수 개수 구하기)

jaeseonyoo 2024. 6. 27. 23:52
    fun solution(n: Int, k: Int): Int {
        var answer = 0
        val convertedK = convertTenToK(n, k).toString()
        var dividedN = StringBuilder()

        for (convertedChar in convertedK) {
            if(convertedChar != '0')
                dividedN.append(convertedChar)
            else if(dividedN.isEmpty())
                continue
            else if(isPrime(dividedN.toString())) {
                answer++
                dividedN.clear()
            } else
                dividedN.clear()
        }

        if(dividedN.isNotEmpty() && isPrime(dividedN.toString()))
            answer++

        return answer
    }

    fun convertTenToK(number: Int, k: Int): Long{
        val convertedNumber = StringBuilder()
        var share = number / k
        var remain = number % k

        while (share >= k) {
            convertedNumber.insert(0, remain)
            remain = share % k
            share /= k
        }

        convertedNumber.insert(0, remain)
        convertedNumber.insert(0, share)

        return convertedNumber.toString().toLong()
    }

    fun isPrime(number: String): Boolean{
        if(number == "1")
            return false

        val sqrtNumber = Math.sqrt(number.toLong().toDouble())

        for(divider in 2.. sqrtNumber.toLong()) {
            if((number.toLong() % divider).toInt() == 0)
                return false
        }

        return true
    }

 

풀이과정

1. n을 k진수로 변환한다.

2. 변환된 값을 반복문을 돌면서 0이 나오기 전까지 StringBuilder에 append한다.

3. 0이 나오면 이전까지 쌓인 값이 소수인지 확인한다.

   3.1. 소수면 답+1

   3.2. StringBuilder를 clear하고 2~3과정을 끝까지 반복한다.

 

포인트

- k진수 변환, 소수 검증을 함수로 분리해주고 구현하기