Algorithm
[Algorithm] 소수 찾기_시간복잡도 O(√N)으로 해결하기.
cornarong
2021. 8. 19. 16:41
설명
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.'
제한 조건
- n은 2이상 1000000이하의 자연수입니다.
예시 입력 / 출력
n | result |
10 | 4 |
5 | 3 |
풀이 과정
for문의 조건으로 시간복잡도를 줄인다.
1. for(int i=2; i<num; i++) = 시간 복잡도O(N)
2. for(int i=2; i<=num/2; i++) = 시간 복잡도O(N)
3. for(int i=2; i*i<=num; i++) = 시간 복잡도O(√N) = 가장 효율적
풀이
class Solution {
// 소수 판별
private boolean isPrime(int num){
for (int i = 2; i*i <= num; i++) {
if(num % i == 0) return false;
}
return true;
}
public int solution(int n) {
int answer = 0;
for (int i = 2; i <= n; i++) if(isPrime(i)) answer++;
return answer;
}
}