프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/12921
소수란?
- 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수
- 1은 소수가 아니다.
① 2를 제외한 2의 배수를 제거
② 3를 제외한 3의 배수를 제거
③ 4는 이미 제거 되었으므로 생략
④ 위의 과정을 원하는 수만큼 반복
<// 1은 소수가 아니므로 2부터 시작
for(int i =2; i<=num; i++){
nums.add(i);
}
② 2부터 50까지 돌면서 그 수를 제외한 배수를 제거
// 2부터 num-1번값까지
// 일반 for문으로 i<=num으로 돌리면 num값이 클경우 너무 많은 반복을 하게됨
// 따라서 i의 제곱이 num보다 작거나 같을때까지 반복하게 되면 모든 소수를 찾을 수 있고 반복횟수도 적어짐
for(int i=2; i*i<=num; i++) {
for (int j = 1; j < nums.size(); j++) {
// 배수이면서 자기자신은 아니여야 함
if (nums.get(j) % i == 0 && nums.get(j) != i) {
nums.remove(j);
}
}
}
③ 최종적으로 남은 리스트 사이즈를 반환
public class PrimeNumber {
public int solution(int num){
List<Integer> nums = new ArrayList<>();
// 1은 소수가 아니므로 2부터 시작
for(int i =2; i<=num; i++){
nums.add(i);
}
// removeif( ) list의 메서드로 조건문을 통해 해당하는 값은 제거시킨다.
// 2부터 num-1번값까지
// 일반 for문으로 i<=num으로 돌리면 num값이 클경우 너무 많은 반복을 하게됨
// 따라서 i의 제곱이 num보다 작거나 같을때까지 반복하게 되면 모든 소수를 찾을 수 있고 반복횟수도 적어짐
for(int i=2; i*i<=num; i++) {
for (int j = 1; j < nums.size(); j++) {
// 배수이면서 자기자신은 아니여야 함
if (nums.get(j) % i == 0 && nums.get(j) != i) {
nums.remove(j);
}
}
}
return nums.size();
}
public static void main(String[] args) {
PrimeNumber p = new PrimeNumber();
System.out.println(p.solution(10));
System.out.println(p.solution(5));
}
}