728x90
소수 찾기
문제 설명
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)
제한 조건
n은 2이상 1000000이하의 자연수입니다.
입출력 예
n result
10 4
5 3
입출력 예 설명
입출력 예 #1
1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환
입출력 예 #2
1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환
function solution(n, s=0, a=[]) {
for(var i=2;i<=n;i++) {
a[i] = true;
}
for(var i=2;i<=n;i++) {
if(a[i]==false) continue;
if(a[i]==true) ++s;
for(var j=2*i;j<=n; j+=i) {
a[j] = false;
}
}
return s
}
console.log(solution(5));
1과 자신만 나눠지는 수를 가져와야하니 일단 하나씩 더해가면 되지만 우선적으로 2,3,5,7... 해당수의 배수를 모두 제거해가면 된다.
기본 2를 true로 줘서 개수를 1개 추가한 후 받아온 값이 될때까지 그 배수를 모두 제거해준다.
'10'을 넣은경우 a[4] 6 8 10 이 false로 제거되서 값이 오르지않고 continue로 넘어가게 된다.
다음은 3을 추가한 후 3의 배수를 제거한다. 이경우 6,9가 제거된다.
4의경우는 모두 false가 되어있기에 그대로 넘어간 후 5가 되고 개수가 1개 추가된다.
6은 3의 배수로 false가 되어있어 넘어가고 7이 되지만 7의경우 바로 true를하고 x2가 된 경우에 그대로 14가되서 값이 넘기에 사라진다.
추가된값은 2,3,5,7 4로 답은 4가된다.
값이 5인경우는 3이된다.
for문이 돌아가는 과정으로 보면
i = 2 인경우
*2를해 4부터 시작해 +=i 가 증감되어 4,6,8,10이 false가 된다.
i = 3 인경우
*2를해 6부터 시작해 +=i 가 증감되어 6,9 가 false가 된다.
i = 4 인경우
이미 false라 돌지않는다.
i = 5 인경우
5만 true가 되고 10은 이미 false.
i = 6 인경우
이미 false라 돌지않는다.
i = 7 인경우
7만 true가 되고 14는 10을 넘었기에 넘어간다.
뒤도 마찬가지.. 이렇게 소수 구하기가 완료된다.
728x90
'개인 공부' 카테고리의 다른 글
[플루터] MaterialApp / Scaffold 클래스 이용해보기 (0) | 2023.04.20 |
---|---|
[프로그래머스] 수박수박수? (1) | 2023.04.20 |
[프로그래머스] 서울에서 김서방 찾기 (0) | 2023.03.30 |
[프로그래머스] 문자열 다루기 기본 (0) | 2023.03.30 |
[프로그래머스] 문자열 내림차순으로 배치하기 (0) | 2023.03.13 |