HIT해

[Swift/프로그래머스] k진수에서 소수 개수 구하기 ( 문자열, 소수 판별 ) 본문

Swift/Swift 알고리즘

[Swift/프로그래머스] k진수에서 소수 개수 구하기 ( 문자열, 소수 판별 )

힛해 2024. 11. 1. 22:02
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/92335

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

진법변환과 제곱근 함수 사용방법이 기억나지 않아 헷갈렸다.

 

진법 변환

Int( origin, radix : n ) // origin 을 n진법으로 변경

 

소수 판별

func isPrime(num : Int) -> Bool {
	if num < 2 {
    	return false
    }
    
    for i in 2...Int(sqrt(Double(num)))+1{
    	if num % i == 0 {
        	return false
        }
    }
    
    return true
}

 

더 효율적인 소수판별이다.

func isPrime(num: Int) -> Bool {
	if num == 2 {
    	return true
    }
    
    if num < 2 {
    	return false
    }
    
    if num % 2 == 0 {
    	return false
    }
    
    for i in stride(from:3 , through: Int(sqrt(Double(num))), by: 3){
    	if num % i == 0 {
        	return false
        }
    }
    
    return true
}

 

 

풀이

import Foundation

func solution(_ n:Int, _ k:Int) -> Int {
    let nums = String(n,radix:k).split(separator:"0").map { Int($0)! }
    let filter = nums.filter{ $0 != 1 }
    
    var result = 0
    
    for i in filter {
        if i == 2 {
            result += 1
            continue
        }
        var prime = true
        for j in 2...Int(sqrt(Double(i))) + 1{
            if i % j == 0 {
                prime = false
                break
            }
        }
        if prime {
            result += 1
        }
    }
    
    print(filter)
    return result
}