아이디어
에라토스테네스를 이용하여 풀었다. 특이한 점은 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, +)
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스 스위프트] 약수의 개수와 덧셈 (0) | 2022.08.30 |
---|---|
[프로그래머스 스위프트] 3진법 뒤집기 (0) | 2022.08.30 |
[프로그래머스 스위프트] 문자열 내 p와 y의 개수 (0) | 2022.08.26 |
[프로그래머스 스위프트] 문자열 내림차순으로 배치하기 (0) | 2022.08.26 |
[프로그래머스 스위프트] 문자열 다루기 기본 (0) | 2022.08.26 |