개발관련

[프로그래머스] 소수 구하기 (JavaScript)

2020. 8. 27. 11:02
목차
  1. 1번째
  2. 2번째
  3. 3번째
  4. 4번째
반응형

 

문제 출처

문제 요약

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

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

문제 풀이

1번째

function solution(n) {
  let count = 0;
  for (let i = 2; i <= n; i++) {
    let 소수 = true;
    for (let j = 2; j < i; j++) {
      if (i % j === 0) {
        소수 = false;
      }
    }
    if (소수) ++count;
  }
  return count;
}
  • 단순한 방법. N(O*2) 주어진 수 까지 나누면서 소수를 구한다.
  • 당연히 타임 아웃

2번째

function solution(n) {
  const 소수들 = [2];
  for (let i = 2; i <= n; i++) {
    const is소수 = 소수들.some((c) => i % c === 0);
    if (!is소수) 소수들.push(i);
  }
  return 소수들.length;
}
  • 소수들로 나누어서 떨어지면 소수가 아니기 때문에 루프를 돌면서 소수만을 구한다.
  • 그래도 타임 아웃

3번째

function solution(n) {
  const 소수들 = new Array(n).fill(true);
  소수들[0] = false;
  for (let i = 2; i ** 2 <= n; i++) {
    if (소수들[i - 1] === true) {
      for (let j = i ** 2; j <= n; j += i) {
        소수들[j - 1] = false;
      }
    }
  }
  return 소수들.filter((e) => e).length;
}
  • 에라토스테네스의 체를 이용한 방법
  • 주어진 값까지 루프를 돌면서 소수의 배수를 먼저 제거한다.

4번째

//위와 같은 원리
function solution(n) {
  const s = new Set();
  //짝수는 소수 일수가 없음
  for (let i = 3; i <= n; i += 2) {
    s.add(i);
  }
  s.add(2);
  for (let j = 3; j ** 2 < n; j++) {
    if (s.has(j)) {
      for (let k = j ** 2; k <= n; k += j) {
        s.delete(k);
      }
    }
  }
  return s.size;
}
  • Set을 이용한 풀이 성능 상은 거의 동일할 듯 하다.

결론

에라토스테네스의 체 라는 것을 이해해야 하는 수학적 문제이다.

소수를 구하기보다는 소수가 아닌 것을 제외하면 되고 그건 소수들의 배수를 제거하면 된다.

반응형

'개발관련' 카테고리의 다른 글

Android Kotlin 안드로이드 코틀린 AlertDialog Dismiss 설정하기 ( Alert 콜백 처리)  (0) 2021.05.28
IOS 앱 개발할때 테스트 시 테스트 플라이트( TestFlight )로 테스트 하는 방법  (0) 2021.04.16
Mobx 심화 mobx의 reactions 종류 autorun, reaction, when  (0) 2021.03.28
MobX Modifiers란? observable shallow,ref,deep  (0) 2021.03.27
[프로그래머스] 문자열 내 마음대로 정렬하기  (0) 2020.08.19
  1. 1번째
  2. 2번째
  3. 3번째
  4. 4번째
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
개발자 Dane
개발자 Dane
IT / 테크 전문 크리에이터 데인 입니다.
개발자 Dane
개발자 Dane의 IT 전문 블로그
개발자 Dane
반응형
  • 분류 전체보기 (172) N
    • 개발관련 (26) N
      • 프론트엔드 지식 (11)
      • 매일 코딩 테스트 챌린지 (27)
      • 자바스크립트 팁 (32)
      • 리액트 (11)
    • 얼리어답터 (11)
    • 팁 (13)
    • 게임 (18)
      • 디아블로2레저렉션 (16)
    • 운동하는 후니 (2)
전체
오늘
어제

태그

  • 룬워드방패
  • 갤럭시성능뻥튀기
  • 코딩테스트
  • 리액트
  • javascript
  • 아이폰
  • 프로그래머스
  • 문자열
  • s3
  • 갤럭시소비자기만
  • 갤럭시긱벤치
  • 자바스크립트
  • 애플페이
  • PNP
  • 바바리안
  • Gatsby
  • yarn
  • GOS해제
  • Next.js
  • gos
  • AWS
  • vscode
  • 도커
  • docker
  • 디아블로2
  • React
  • 문자열정렬
  • 레저렉션
  • 디아블로4
  • 디아블로2레저렉션

최근 댓글

hELLO · Designed By 정상우.
개발자 Dane
[프로그래머스] 소수 구하기 (JavaScript)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.