주어진 정수를 K진수로 변환한 뒤, 0을 기준으로 나눈다. 현재 구하려는 소수
P
는 0을 가지고 있지 않고 0 주변을 둘러싸고 있는 소수로 표현되기 때문이다. 해당 수가 소수인지 판별하면 된다. 중복 소수까지 카운트하는 데 주의하자.
K
진수로 변환하는 것이다. 가장 쉬운 방법은 주어진 수가 0이 될 때까지 K
로 계속해서 나누는 것인데, 이때 N
은 K
로 나눈 몫이 되고 나머지를 계속해서 덧붙여 나간다. N
이 0이 되는 시점에서 반복문이 종료되고, 구하려는 K
진수는 지금까지 추가한 나머지를 거꾸로 출력한 것이다.import Foundation
func solution(_ n:Int, _ k:Int) -> Int {
let convertedNumber = convertKary(n, k)
let splitNumber = convertedNumber.split(separator: "0")
var total = 0
for number in splitNumber {
if isPrime(Int(number)!) {
total += 1
}
}
return total
}
func convertKary(_ n: Int, _ k: Int) -> String {
var result = ""
var n = n
while n > 0 {
let q = n / k
let r = n % k
result += String(r)
n = q
}
let converted = String(result.reversed())
return converted
}
func isPrime(_ number: Int) -> Bool {
if number < 2 {
return false
}
let term = Int(sqrt(Double(number))) + 1
for check in 2..<term {
if number % check == 0 {
return false
}
}
return true
}