빠에야는 개발중
소수의 개수 구하기 본문
numberOfPrime 메소드는 정수 n을 매개변수로 입력받습니다.
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하도록 numberOfPrime 메소드를 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)
10을 입력받았다면, 1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환
5를 입력받았다면, 1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환
이 문제는
1. 1부터 n까지 각각 약수가 존재하는지 검사
2. 에라토스테네스의 체
이렇게 두가지 방법으로 풀 수 있다. 1번 방법은 모든 경우를 다 해보는 방법이고 2번 방법은 그나마 계산 수를 줄이는 방법이다. 그래서 2번을 선택했다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | class NumOfPrime { int numberOfPrime(int n) { int result = 0; int arr[] = new int[n+1]; for(int i = 2; i < n+1 ; i++) { arr[i] = i; } for(int i = 2; i<n+1;i++) { if(arr[i] == 0) { continue; } for(int j = i+1; j<n+1;j++) { if(arr[j] != 0 && arr[j]%i == 0) { arr[j] = 0; } } } for(int i = 1;i<n+1;i++) { if(arr[i] != 0) { result++; } } return result; } public static void main(String[] args) { NumOfPrime prime = new NumOfPrime(); System.out.println(prime.numberOfPrime(10)); } } | cs |
1은 소수가 아니기 때문에 2부터 초기화를 해주었다.
'공부 > 알고리즘 문제' 카테고리의 다른 글
정수 내림차순으로 배치하기 (0) | 2018.03.04 |
---|---|
최솟값 만들기 (0) | 2018.03.04 |
행렬의 덧셈 (0) | 2018.02.23 |
문자열 내림차순으로 배치하기 (0) | 2018.02.16 |
물통 (0) | 2018.02.16 |
Comments