채린씨의 티스토리
[Programmers] Level1 - 소수 찾기(JavaScript) 본문
문제 설명
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.)
제한 조건
- n은 2이상 1000000이하의 자연수입니다.
입출력 예
n | return |
10 | 4 |
5 | 3 |
입출력 예 설명
입출력 예 #1
1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환
입출력 예 #2
1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3을 반환
나의 풀이
// 소수인지 판별하는 함수
function isPrime(x) {
for (let i = 2; i <= Math.sqrt(x); i++) {
if (x % i === 0) return false;
}
return true;
}
function solution(n) {
// 소수의 개수를 저장할 변수
let answer = 0;
// 1은 소수가 아니므로 2부터 n까지 모든 수에 대해
for (let i = 2; i <= n; i++) {
// 소수이면 소수의 개수에 1 추가
if (isPrime(i)) answer++;
}
return answer;
}
좋았던 다른 사람의 풀이
에라토스테네스의 체를 활용한 풀이
(참고: https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98_%EC%B2%B4)
function solution(n) {
// 2부터 n까지의 수로 구성된 Set
const s = new Set();
for (let i = 2; i <= n; i++) {
s.add(i);
}
// 2부터 n의 제곱근보다 작은 최대 정수까지
for (let j = 2; j < Math.sqrt(n); j++) {
// Set에 해당 수가 포함되면
if (s.has(j)) {
// 그 수를 제외하고 그 수의 배수는 모두 삭제
for (let k = j * 2; k <= n; k += j) {
s.delete(k);
}
}
}
return s.size;
}
프로그래머스 문제들의 자바스크립트 풀이가 궁금하신가요? 아래 링크를 클릭해보세요!
https://programmers-solution-bank.netlify.app/
'코딩테스트 대비' 카테고리의 다른 글
[Programmers] Level1 - 문자열 내림차순으로 배치하기(JavaScript) (0) | 2022.04.16 |
---|---|
[Programmers] Level1 - 문자열 다루기 기본(JavaScript) (2) | 2022.04.16 |
[Programmers] Level1 - 2016년(JavaScript) (0) | 2022.04.07 |
[Programmers] Level1 - 시저 암호(JavaScript) (0) | 2022.04.07 |
[Programmers] Level1 - 약수의 합(JavaScript) (0) | 2022.04.07 |
Comments