그냥 무작정 구하면 효율성 테스트 통과를 못해서 별별 거 다 시도하다가 결국 질문하기에 있는 다른 사람의 힌트 보고 풀었다.
primes
배열에 지금까지 찾은 소수를 저장해 둔다.n
까지 증가시키면서 소수인지 판별: 첫 번째 for
primes
배열의 각 요소를 꺼내면서 지금 확인하는 수 i
의 제곱근보다 작은 소수로 나누어떨어지는지 확인: 두 번째 for
break
result
를 증가시키고 primes
배열에 추가한 후 반복문 종료: push()
, break
function solution(n) {
let result = 1;
const primes = [2];
for (let i = 3; i <= n; ++i) {
for (const prime of primes) {
if (i % prime === 0) break;
if (prime > Math.sqrt(i)) {
++result;
primes.push(i);
break;
}
}
}
return result;
}
유명한 방식은 에라토스테네스의 체라고 하는데 일단 이렇게 풀어서 그냥 넘어간다...
너무 많은 시간을 썼음... 다음에 비슷한 문제가 나오면 알아보기로...