Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- TypeScript 문법 소개
- 리팩토링 회고
- Frontend Roadmap
- 개발자 특강
- KDT 프로그래머스 데브코스 프론트엔드
- useRef 지역 변수
- 인프런 자바스크립트 알고리즘 문제풀이
- 투포인터알고리즘 js
- frontend roadmap study
- 백준 js
- 모던 javascript Deep Dive
- react customHook 예시
- Vue3
- 프로그래머스 K_Digital Training
- 모던 자바스크립트 TIL
- 모던 자바스크립트 Deep Dive
- 프로그래머스 데브코스 프론트엔드
- 모던 자바스크립트 딥다이브
- useEffect return
- Vue3 Router
- 프로그래머스 데브코스
- 머쓱이
- 프로그래머스 데브코스 프론트엔드 TIL
- 우테캠 회고록
- 백준 node.js
- KDT 프로그래머스
- 모던 자바스크립트 Deep Dive TIL
- K_Digital Training
- react 프로젝트 리팩토링
- 프로그래머스 K_Digital Training 프론트엔드
Archives
- Today
- Total
프론트엔드 개발자의 기록 공간
[프로그래머스 JavaScript] 소수 찾기 본문
프로그래머스 Level1 소수찾기
문제 설명 : 생략
function solution(n) {
//효율성 통과를 위해 에라토스테네스의 체 이용
var answer = 0;
let num = new Array(n + 1);
//인덱스에 해당 값 세팅
for (let i = 2; i <= n; i++) {
num[i] = i;
}
//각 인덱스의 배수값은 소수가 아니므로 0으로 세팅
for (let j = 2; j <= n; j++) {
if (num[j] === 0) continue;
for (let k = j * 2; k <= n; k += j) {
num[k] = 0;
}
}
//0이 아닌 것들은 소수이므로 탐색
for (let i = 2; i <= n; i++) {
if (num[i] !== 0) answer += 1;
}
return answer;
}
코드 설명 : 소수를 구하는 여러가지 방법이 있다. 저는 보통 약수를 이용한 제곱근 소수 알고리즘을 사용합니다.
하지만 이 문제는 n을 소수판별이 아닌 n까지 소수의 개수를 구하는 알고리즘 이므로 다른 방식을 사용한다.
여러 방식도 있지만 이 문제에서는 효율성 테스트도 있기 때문에 비교적 시간복잡도가 제일 낮은 "에라토스테네스의 체" 방식의 알고리즘을 사용한다.
"에라토스테네스의 체" 방식을 간략하게 설명하자면 각 수의 배수에 해당하는 수는 소수가 아니므로 지운다.
ex)3,6,9가 있다면 6,9는 3의 배수가 아니므로 지워도 무방하다.
이런식으로 지워나간 후, 남아있는 수를 파악하면 그것이 소수의 개수가 된다.
728x90
'알고리즘_JS > 프로그래머스_Level1' 카테고리의 다른 글
[프로그래머스 JavaScript] 문자열을 정수로 바꾸기 (0) | 2021.07.14 |
---|---|
[프로그래머스 JavaScript] 수박수박수박수박수박수? (0) | 2021.07.14 |
[프로그래머스 JavaScript] 서울에서 김서방 찾기 (0) | 2021.07.14 |
[프로그래머스 JavaScript] 문자열 다루기 기본 (0) | 2021.07.13 |
[프로그래머스 JavaScript] 문자열 내림차순으로 배치하기 (0) | 2021.07.13 |
Comments