본문 바로가기
Algorithm/문제풀이_프로그래머스

[Swift][소수][LV_2] K진수에서 소수개수 구하기

by Joahnee 2022. 2. 25.

요구능력 : 소수판별

 

코드설명 : 

 

처음에 에라토스테네스의 체를 100만으로 설정하고 풀었는데,

두 개의 테스트케이스에서 coreDumped가 나왔다.

인덱스 문제인것같아서 n = 1000000으로 설정하고 k = 6으로 설정해봤는데,

에라토스테네스의 체에 들어간 수가 100만 보다 큰 수가 나와버려서 coreDumped된것이었다.

 

그래서 4천만으로 설정하고 해봤는데 당연히 시간초과 ^^

에라토스테네스가 더 빠른건줄알고 100만으로 두고 그보다 큰수가 나오면 아래에 isPrime함수를 사용했는데,

이렇게 사용한 시간보다 isPrime만 사용한 시간이 더 짧았다.

 

사실 이 문제에서 소수를 판별해봤자 몇개나 판별하겠나..

 

이 문제를 통해서 에라토스테네스의 체를 소수구한다고 아무때나 사용하는게 아니라는것을 알았다

 

후기 : 괜히 가까운길 냅두고 돌아간느낌..

func solution(_ n:Int, _ k:Int) -> Int {
    func isPrime(_ num: Int) -> Bool{
        for j in stride(from: 2, through: Int(sqrt(Double(num))), by: 1){
            if num % j == 0 {
                return false
            }
        }
        return true
    }
    //k진수로 변경
    let jinsu = String(n, radix: k)
    let arr = Array(jinsu)
    var resultArr = [Character]()
    for i in arr{
        if i != "0"{
            resultArr.append(i)
        }else{
            resultArr.append(" ")
        }
    }
    let resultArrString = String(resultArr)
    let a = resultArrString.split(separator: " ").map{Int(String($0))!}
    var count = 0
    
    for i in a{
        if i != 1{
            if isPrime(i){
                count += 1
            }
        }
    }
    
    return count
}

댓글