https://programmers.co.kr/learn/courses/30/lessons/12921#
2가지를 알고 있어야 한다.
1. Prime Number는 Root로 자신을 쒸운값 이하로 2부터 순차적으로 나누어서 나누어 지면 Prime이 아니다. 반대로 끝까지 안나누어 지면 Prime이다.
function isPrime(digit){
let count = Math.floor(Math.sqrt(digit));
for(let i = 2; i <= count; i++){
if(arr[i]==1)
if(digit%i == 0) return false;
}
return true;
}
2. 한번 Prime으로 선정이 된 값의 배수는 모두 Prime이 아니다.
for(let i = 2; i <= n; i++){
if(arr[i] == -1){
if(isPrime(i)){
count++;
arr[i] = 1;
for(let j = i+i; j <= n;j+=i){
arr[j] = 0;
}
}
}
}
상기 내용을 합치면 된다.
function solution(n) {
let arr = new Array(n+1).fill(-1);
let count = 0;
for(let i = 2; i <= n; i++){
if(arr[i] == -1){
if(isPrime(i)){
count++;
arr[i] = 1;
for(let j = i+i; j <= n;j+=i){
arr[j] = 0;
}
}
}
}
return count;
function isPrime(digit){
let count = Math.floor(Math.sqrt(digit));
for(let i = 2; i <= count; i++){
if(arr[i]==1)
if(digit%i == 0) return false;
}
return true;
}
}
728x90
반응형
'Problem Solving' 카테고리의 다른 글
실패율 (0) | 2020.09.03 |
---|---|
[1차] 다트 게임 (0) | 2020.09.03 |
서울에서 김서방 찾기 (0) | 2020.09.03 |
문자열 다루기 기본 (0) | 2020.09.03 |
문자열 내림차순으로 배치하기 (0) | 2020.09.03 |