https://programmers.co.kr/learn/courses/30/lessons/12921
코딩테스트 연습 - 소수 찾기
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 조건 n은 2이상
programmers.co.kr
옹이 생각보다 어렵네
에스테라토스의 체를 써야 효율성 테스트를 통과한다.
n개만큼 빈 boolean 배열을 만들어서
2~n까지 값의 배수를 true로 바꾸고
배열 속 false 개수를 세어주면 된다.
class Solution {
public int solution(int n) {
int answer = 0;
boolean number[] = new boolean[n+1];
for(int i = 2; i <= n; i++){
if(number[i]) continue;
for(int j = i * 2; j <= n; j += i)
number[j] = true;
}
for(int i = 2; i <= n; i++) // 0,1은 소수 아니니까 2부터..
if(!number[i]) answer++;
return answer;
}
}
음 중요한 것은 j 값의 범위를 i * 2부터 시작해야한다는 점...?
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 최소직사각형 for Python (0) | 2022.03.11 |
---|---|
[프로그래머스] 시저 암호 for Python (0) | 2022.03.01 |
[프로그래머스] 문자열을 정수로 바꾸기 for JAVA (0) | 2022.02.26 |
[프로그래머스] 서울에서 김서방 찾기 (0) | 2022.02.23 |
[프로그래머스] 문자열 다루기 기본 for JAVA (0) | 2022.02.22 |