[level 1] 소수 찾기

2022. 1. 17. 10:36·알고리즘/JavaScript

문제

 

풀이 코드

function solution(n) {
  let numArr = new Array(n).fill(1);
  for (let i = 2; i * i <= n; i++)
    for (let j = i * i; j <= n; j += i) numArr[j - 1] = 0;
  return numArr.reduce((sum, item) => sum + item, 0) - 1;
}

 

풀이 과정

어려운 문제였다 혼자 해결을 못하고 구글링을 통해 개념을 숙지했다

역시 나는 한참 부족하다

 

일단 소수찾는 알고리즘으로 에라토스테네스의 체 라는 개념을 알고 있어야 한다.

https://ko.wikipedia.org/wiki/에라토스테네스의_체

 

정말 간단히 설명하면 다음과 같다.

 

1. 소수가 아닌 수는 배수로 이루어진다.

2. 배수를 제거하면 남는 수들이 결국 소수가 된다.

 

이 개념을 바탕으로, 코드를 참고하여 작성하였다.

 

코드의 순서는 다음과 같다.

1. 우선, n 크기의 배열을 생성하고, 해당 배열에 fill 함수를 통하여 모든 요소를 1로 세팅한다.
2. 이전에 약수를 구하는 알고리즘과 마찬가지의 이유로, 모든 수를 비교 하는것은 시간적으로 너무 많이 낭비된다, 이를 해결하기 위해 제곱근으로 비교하며 for 루프를 돈다.
3. 순회 할때마다, 해당수의 배수에 해당하는 요소들의 인덱스를 0으로 설정한다. ( j - 1 )을 하는 이유는 인덱스는 0부터 시작하기 때문.
4. 그렇게 모든 수 까지 순회하고 나면, 소수가 위치한 인덱스만 1이된다.
5. reduce 함수를 이용해 모든 요소를 더해주면 소수의 갯수가 될것이다.
6. 단, 여기에는 1 도 포함되지만, 1은 소수가 아니므로 1을 빼준다.
'알고리즘/JavaScript' 카테고리의 다른 글
  • [level 1] 문자열 내림차순으로 배치하기
  • [level 1] 서울에서 김서방 찾기
  • [level 1] 이상한 문자 만들기
  • [level 1] 수박수박수?
Jeohong
Jeohong
기억 보단 기록을
  • Jeohong
    Chikong Devlog
    Jeohong
  • 전체
    오늘
    어제
    • 분류 전체보기 (186)
      • ---- 개발 컨텐츠 ---- (0)
      • iOS (30)
        • Swift 문법 (1)
        • iOS 개념 (12)
        • HIG (5)
        • SwiftUI (7)
        • UIKit (4)
      • Side Project (0)
      • 개발서적 (4)
        • 객체지향 사실과 오해 (4)
      • 알고리즘 (74)
        • 자료구조 개념 (2)
        • Swift (25)
        • JavaScript (47)
      • ---- 회고 계획 컨텐츠 ---- (0)
      • 계획 및 일기 (10)
      • 회고록 (1)
      • 컨퍼런스 탐방 (1)
      • 미드로 영린이 탈출하기 (1)
      • ---- Previous content ---- (0)
      • Frontend (2)
        • HTML & CSS (2)
      • KITRI 수업 (17)
        • 리눅스 (14)
        • 네트워크 (2)
      • 42seoul (17)
        • Bonr2code (9)
        • 넋두리 (7)
        • 멘토특강 (1)
      • 해킹 실습 (20)
        • 해커스쿨 - F.T.Z (19)
        • WebGoat (1)
      • Tensorflow로 시작하는 NLP (1)
        • 예제 (1)
      • 자연어처리 입문 (1)
        • 이론 (1)
      • 텐서플로로 배우는 딥러닝 (7)
        • 이론 (2)
        • 예제 (5)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    hig
    javascript
    자료구조
    코딩
    42seoul
    42서울
    Algorithm
    개발자
    네트워크
    boj
    1서클
    백준
    IOS
    스위프트
    알고리즘
    프로그래머스
    본과정
    라피신
    SwiftUI
    swift
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Jeohong
[level 1] 소수 찾기
상단으로

티스토리툴바