본문 바로가기

코딩 테스트/Lv.2

[프로그래머스] K진수에서 소수 개수 구하기 with Kotlin

문제

양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다.

 

  • 0P0처럼 소수 양쪽에 0이 있는 경우
  • P0처럼 소수 오른쪽에만 0이 있고 왼쪽에는 아무것도 없는 경우
  • 0P처럼 소수 왼쪽에만 0이 있고 오른쪽에는 아무것도 없는 경우
  • P처럼 소수 양쪽에 아무것도 없는 경우
  • 단, P는 각 자릿수에 0을 포함하지 않는 소수입니다.
    예를 들어, 101은 P가 될 수 없습니다.

 

풀이

K 진수로 변환 후 0을 기준으로 나누면 P만 남는다.

소수인 P의 개수만 구하면 되는 문제

 

코드

class Solution {
    fun solution(n: Int, k: Int): Int {
        var answer: Int = 0
        var _k = n.toString(k)

        _k.split("0").forEach{
            if(it.isNotBlank() && isPrime(it.toLong())) answer++
        }

        return answer
    }

    fun isPrime(num: Long): Boolean{
        if(num<=1) return false

        for(i in 2 ..Math.sqrt(num.toDouble()).toLong()){
            if(num%i==0L) return false
        }
        return true
    }
}