반응형
안녕하세요. KataRN입니다.
코테 문제를 풀다보면 소수를 구하는 문제가 많습니다.
보통 소수관련 문제가 나오면 효율성도 좋아야 되더라구요... 그리고 소수와 효율성하면 꼭 언급하는 이론이 있습니다.
그건 바로 '에라토스테네스의 체' 입니다.
소수를 하나하나 구하는것보다 아래의 그림처럼 소수의 배수를 제거하는것이 빠릅니다.
이를 포함하여 소수판별코드, 소수의개수, 소수구하기 등을 코드로 구현해봤습니다.
소수 판별 코드(swift)
func isPrime(_ num: Int) -> Bool {
if num == 0 {
return false
}
if num < 4 {
return num == 1 ? false : true
}
for i in 2...Int(sqrt(Double(num))) {
if num % i == 0 {
return false
}
}
return true
}
1부터 n까지 소수 배열 구하기 - 에라토스테네스의 체
func primeArr(_ n:Int) -> [Int] {
var arr = Array(repeating: false, count: n + 1)
var answer = [Int]()
for i in 2...n{
if arr[i] == false{
answer.append(i)
for j in stride(from: i, to: n + 1, by: i){
arr[j] = true
}
}
}
return answer
}
<응용코드>
1부터 n까지 소수 개수 구하기 - 에라토스테네스의 체
func primeCount(_ n:Int) -> Int {
var count = 0
var arr = Array(repeating: false, count: n + 1)
for i in 2...n{
if arr[i] == false{
count += 1
for j in stride(from: i, to: n + 1, by: i){
arr[j] = true
}
}
}
return count
}
이처럼 좋은 기본코드 하나만 제대로 알고있으면 다양하게 활용할 수 있습니다.
오늘도 읽어주셔서 감사합니다.
반응형
'Old_SWIFT(221012) > 코딩테스트' 카테고리의 다른 글
글자 < - > 숫자 변환 UnicodeScalar() 다루기 (0) | 2022.06.03 |
---|---|
코딩테스트용 참고사전 (0) | 2022.03.14 |
순열과 조합 (0) | 2021.11.15 |
최대공약수, 최소공배수 구하기 (0) | 2021.10.18 |
코딩테스트 (0) | 2021.09.24 |