[프로그래머스 LV2] k진수에서 소수 개수 구하기

Junyoung Park·2022년 8월 23일
0

코딩테스트

목록 보기
584/631
post-thumbnail

1. 문제 설명

k진수에서 소수 개수 구하기

2. 문제 분석

주어진 정수를 K진수로 변환한 뒤, 0을 기준으로 나눈다. 현재 구하려는 소수 P는 0을 가지고 있지 않고 0 주변을 둘러싸고 있는 소수로 표현되기 때문이다. 해당 수가 소수인지 판별하면 된다. 중복 소수까지 카운트하는 데 주의하자.

  • 문제의 핵심은 주어진 수를 K진수로 변환하는 것이다. 가장 쉬운 방법은 주어진 수가 0이 될 때까지 K로 계속해서 나누는 것인데, 이때 NK로 나눈 몫이 되고 나머지를 계속해서 덧붙여 나간다. N이 0이 되는 시점에서 반복문이 종료되고, 구하려는 K진수는 지금까지 추가한 나머지를 거꾸로 출력한 것이다.

3. 나의 풀이

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
}
profile
JUST DO IT

0개의 댓글