Algorithm/프로그래머스

[프로그래머스 스위프트] 소수찾기

devKen 2022. 8. 30. 16:30

아이디어

에라토스테네스를 이용하여 풀었다. 특이한 점은 array를 1로 초기화하는 부분에서 처음에는 i의 값을 대입하고 다시 for문을 통해서 cnt를 체크해서 리턴하는 방법을 썼었는데 효율성에서 탈락했다. 때문에, 소수는 1로 체크하고 reduce를 이용하여 모든 요소를 합쳐버리는 방식으로 소수의 개수를 추출했더니 통과했다.

 

해답

import Foundation

func solution(_ n:Int) -> Int {
    var array = Array(repeating: 0, count: n + 1)
    for i in 2 ... n {
        array[i] = 1
    }
    for i in 2 ... n {
        if array[i] == 0 {
            continue
        }
        for j in stride(from: i + i, through: n, by: i) {
            array[j] = 0
        }
    }
    return array.reduce(0, +)
}