반응형
출처
https://www.acmicpc.net/problem/1978
1978번: 소수 찾기
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
www.acmicpc.net
문제
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오. 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
풀이
처음에는 splice를 이용해 소수가 아닌 수를 걸러내려 하였지만 걸러내면서 index가 계속 바뀌어 실패하였다.
핵심로직
- 다른 분들의 정답을 참고하여 filter 메서드를 사용해서 index와 상관없이 걸러낼 수 있었다.
- Math.sqrt()메서드를 통해 해당수의 제곱근까지만 나누어서 소수인지 아닌지 판별 할 수 있다.
코드
첫번째 시도
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const num = Number(input[0]);
let arr = input[1].split(' ').map(Number);
for (i = 0; i < num; i++) {
let target = arr[i];
if (target === 1) {
arr.splice(arr.indexOf(target), 1);
}
for (j = 2; j < target; j++) {
if (target === 2) {
return;
}
if (target % j === 0) {
arr.splice(arr.indexOf(target), 1);
}
}
}
console.log(arr.length);
정답
const isPrime = (n) => {
if (n == 1) {
return false;
}
for (let i = 2; i <= Math.sqrt(n); i++) {
if (n % i === 0) {
return false;
}
}
return true;
}
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const num = Number(input[0]);
let arr = input[1].split(' ').map(Number);
console.log(arr.filter((v) => isPrime(v)).length
반응형
댓글