[프로그래머스] Lv.1 소수 찾기 - JavaScript

2025. 7. 5. 23:58·CodingTest

문제 설명

1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.

소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)

 

제한 사항

  • n은 2이상 1000000이하의 자연수입니다.

 

입출력 예

numbers result
10 4
5 3

 

첫번째 시도한 풀이

function isPrime(x){
    for(let i=2; i<=Math.sqrt(x); i++){
        if(x%i===0) return false;
    }
    return true;
}

function solution(n) {
    var answer = 0;
    
    for(let i=2; i<=n; i++){
        if(isPrime(i))
            answer++;
    }
    return answer;
}

 

 

2부터 소수이므로, 숫자 2부터 n까지 순회하면서, 각 숫자에 대해 isPrime(소수 인지 판별하는 함수)를 호출해서, 소수일 경우 answer의 값을 증가시켜서 총 소수의 갯수를 계산한다. isPrime은 2부터 Math.sqrt(x)까지의 숫자로 나누고, 나누어떨어지면 소수가 아니라고 판단하였다.

 

 

 

테스트케이스는 다 통과했는데, 시간복잡도에서 걸렸다....

따라서 시간복잡도 측면에서 더 나은 방법인 에라토스테네스의 체를 써보기로 했다. 

 

성공한 풀이

function solution(n){
    let array = Array(n+1).fill(true);
    array[0]=array[1]=false;
    
    for(let i=2; i<=Math.sqrt(n); i++){
        if(array[i]){
            for(let j=i*i; j<=n; j+=i){
                array[j]=false;
            }
        }
    }
    
    let answer = 0;
    for(let i= 2; i<= n; i++){
        if(array[i])answer++;
    }
    return answer;
}

 

일단 인덱스가 0부터 n까지인 배열을 선언하고, 0과 1은 소수가 아니기에 false로 초기화를 시켜주었다. 2부터 √n까지 반복하면서, true로 남아있는 숫자는 소수로 간주한다. 또한 i의 배수들도 모두 소수가 아니므로 false로 표시한다. 최종적으로 array[i]가 true인 값의 갯수를 세어서 반환한다. 

 

벌써 시간복잡도를 생각해야 될 때가 왔다니...벌써부터 어렵다 🥹

 

'CodingTest' 카테고리의 다른 글

[프로그래머스] Lv.1 모의고사 - JavaScript  (2) 2025.08.11
[프로그래머스] Lv.1 소수 만들기 - JavaScript  (1) 2025.07.06
[프로그래머스] Lv.1 두 개 뽑아서 더하기 - JavaScript  (0) 2025.07.02
[프로그래머스] Lv.1 이상한 문자 만들기 - JavaScript  (0) 2025.07.02
[프로그래머스] Lv.1 정수 제곱근 판별 - JavaScript  (3) 2024.01.28
'CodingTest' 카테고리의 다른 글
  • [프로그래머스] Lv.1 모의고사 - JavaScript
  • [프로그래머스] Lv.1 소수 만들기 - JavaScript
  • [프로그래머스] Lv.1 두 개 뽑아서 더하기 - JavaScript
  • [프로그래머스] Lv.1 이상한 문자 만들기 - JavaScript
김애룽
김애룽
개발하면서 공부한 것들을 끄적입니다
  • 김애룽
    김애룽의 개발 아카이브
    김애룽
  • 전체
    오늘
    어제
    • 분류 전체보기 (39)
      • React (10)
      • Next.js (2)
      • JavaScript (5)
      • CodingTest (10)
      • 대외활동 (3)
      • Git (1)
      • CS (5)
      • 정보처리기사 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    const
    코드잇
    프로그래머스
    var
    호이스팅
    멋쟁이사자처럼
    한성대 멋사
    정보처리기사
    useCallback
    Programmers
    useMemo
    props
    정처기
    SSR
    Next.js
    javascript
    리액트
    react
    hooks
    js
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
김애룽
[프로그래머스] Lv.1 소수 찾기 - JavaScript
상단으로

티스토리툴바