작성
·
155
1
프로그래머스 LV1 소수찾기 문제에서 알려주신 방법으로 풀이를 진행했는데 정확도는 통과합니다만 시간초과가 나옵니다.
효율까지 고려하려면 다른식으로 풀어야되나요?
문제는 n =10 이 주어지면 1~10 까지의 자연수 중 소수의 개수를 찾는 문제입니다.
코드는
function solution(n) {
let count=0;
for (let i = 2 ; i <= n; i++) {
if (isPrime(i)) {
count++
}
}
return count
}
function isPrime(num) {
for (let i = 2; i <= parseInt(Math.sqrt(num)); i++) {
if ( num % i === 0) {
return false
}
}
return true
}
solution(10);
solution(5);
다음과 같이 작성했습니다.
답변 1
10
안녕하세요^^
효율성을 통과하기 위해서는 제곱근까지 돌리는 것보다는 소수를 찾는 수학적 방식인 에라토스테네스 체 방식을 써야 할 겁니다. 아래는 에라토스테네스 체 방식입니다. 에라토스테네서 체를 모르시면 구글링해보세요.
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(n) {
let count=0;
let ch=Array.from({length:n+1}, ()=>0);
for (let i = 2 ; i <= n; i++){
if(ch[i]===0){
count++;
for(let j=i; j<=n; j+=i){
ch[j]=1;
}
}
}
return count;
}
console.log(solution(20));
</script>
</body>
</html>