반응형
프로그래머스 소수찾기 문제를 풀면서 예전에 사용해보았던 에라토스테네스의 체라는 알고리즘을 다시 한 번 사용해보았습니다.
에라토스테네스의 체를 그림으로 한번 살펴볼까요?
이런 식으로 2의 배수부터 지워나가 3의 배수, 4의 배수... 증가시켜 제거하는 방법입니다.
코드 리뷰를 통해서 확인해보겠습니다.
function solution(n) {
let arr = Array(n+1).fill(true).fill(false,0,2);
//n의 숫자의 크기만큼 array를 할당해주고 true로 채워줍니다. 0,1은 소수가 아니기 때문에 제외해줍니다.
for(let i =2; i*i<=n;i++){ //i의 배수만큼 증가시켜줍니다. *(2는 소수임으로 2를 제외한 2의배수부터 증가시킵니다.)
if(arr[i]){ //arr[i]가 참일 경우
for(let j=i*i;j<=n; j+=i){ //제곱값만큼 배열값을 찾아 제외해줍니다.
arr[j] = false;
}
}
}
return arr.filter(e => e).length; //true인 경우만 소수임으로 false을 제외해줍니다.
}
오래간만에 에라토스테네스의 체를 사용해서 문제를 풀어보았습니다.
반응형
'혼자 공부하는 것들 > 알고리즘' 카테고리의 다른 글
[JS] 프로그래머스 약수의 개수와 덧셈 (0) | 2021.10.21 |
---|---|
유클리드 호제법 (최대공약수, +최소공배수) (0) | 2021.10.03 |
[프로그래머스] 숫자 문자열과 영단어 (2021 카카오 채용연계형 인턴십) (0) | 2021.08.28 |
[프로그래머스][Python] 두 개 뽑아서 더하기 (0) | 2021.02.21 |
[프로그래머스][Python] 나누어 떨어지는 숫자 배열 (0) | 2021.02.21 |
댓글