whatisthis?
[프로그래머스] 소수 찾기 - JavaScript 본문
javascript
문제 설명
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 isPrime (num) {
for (let i=2; i<= Math.sqrt(num); i++) {
if (num % i === 0) return false;
}
return true;
}
function solution(n) {
let primeArr = [];
for (let i=2; i<=n; i++) {
if (isPrime(i)) primeArr.push(i);
}
return primeArr.length;
}
실행 결과
테스트 1 〉 통과 (0.05ms, 29.8MB)
테스트 2 〉 통과 (0.09ms, 30MB)
테스트 3 〉 통과 (0.17ms, 30.2MB)
테스트 4 〉 통과 (0.32ms, 29.9MB)
테스트 5 〉 통과 (0.22ms, 29.7MB)
테스트 6 〉 통과 (29.30ms, 32.9MB)
테스트 7 〉 통과 (21.83ms, 32.4MB)
테스트 8 〉 통과 (23.79ms, 32.6MB)
테스트 9 〉 통과 (26.48ms, 33.1MB)
테스트 10 〉 통과 (69.32ms, 34.1MB)
테스트 11 〉 통과 (242.06ms, 35.5MB)
테스트 12 〉 통과 (77.18ms, 34.2MB)
- 효율성 테스트
테스트 1 〉 통과 (278.24ms, 34.8MB) 테스트 2 〉 통과 (265.52ms, 34.6MB) 테스트 3 〉 통과 (263.26ms, 34.9MB) 테스트 4 〉 통과 (269.57ms, 34.8MB)
다른 코드
function solution(n) {
const result = new Set();
for(let i=1; i<=n; i+=2){
result.add(i);
}
result.delete(1); // 1 제거
result.add(2); // 2 추가
for(let j=3; j<Math.sqrt(n); j++){
if(result.has(j)){ // 이미 있는 거면
for(let k=j*2; k<=n; k+=j){ // j*2 부터 n까지 j의 배수를
result.delete(k); // 제거함
}
}
}
return result.size; // 개수
}
Set
을 이용한 풀이이다.
2의 배수는 소수가 아니므로, 1부터 n까지 +2씩 증가하면서 Set객체에 add한다.
set.add()
,set.delete()
,set.has()
,set.size()
메서드 이용.
여기서 set는 new Set()으로 선언한 Set객체임.
효율성 테스트
테스트 1 〉 통과 (175.70ms, 57.3MB)
테스트 2 〉 통과 (174.05ms, 56.8MB)
테스트 3 〉 통과 (175.32ms, 57.3MB)
테스트 4 〉 통과 (159.59ms, 57.4MB)
'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글
[프로그래머스] 문자열 다루기 기본 - JavaScript (0) | 2022.07.10 |
---|---|
[프로그래머스] 서울에서 김서방 찾기 - JavaScript (0) | 2022.07.10 |
[프로그래머스] 수박수박수박수박수박수? - JavaScript (0) | 2022.07.10 |
[프로그래머스] 문자열을 정수로 바꾸기 - JavaScript (0) | 2022.07.10 |
[프로그래머스] 시저 암호 - JavaScript (0) | 2022.07.07 |