안녕하세요
[node.js] 2581 소수 (자바스크립트) 기본수학단계2 /cfr 본문
2581 소수
자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.
60
100
M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력합니다.
M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력합니다.
620
61
제출한 답
const [a, b] = require("fs").readFileSync("dev/stdin").toString().split("\n").map(Number);
let arr = [];
function prime(i) {
for (j = 2; j * j <= i; j++) {
if (i % j == 0) {
return false;
}
}
return true;
}
for (i = a; i <= b; i++) {
arr.push(i);
if (i == 1) {
arr.pop();
}
if (i == b) {
let primeList = arr.filter((i) => prime(i));
if (primeList.length == 0) {
console.log(-1);
} else {
let sum = 0;
primeList.forEach((x) => {
sum += x;
});
console.log(sum + "\n" + primeList[0]);
}
}
}
코드설명
m~n까지의 배열을 담은 리스트를 만듭니다. > [60, 61, ... , 100]
리스트에 담긴 배열을 filter 함수를 통해서 소수일 경우만 남깁니다. > [61, 63, ..., 97]
출력 사항에 따라 리스트에 남은 수들의 합과, 리스트의 첫번째 인덱스를 반환합니다. 620, 61
- let arr = [];
리스트를 만들어 M이상 N이하의 수를 배열로 만듭니다. - [소수 찾기] 소수인지 알기 위해서는 소수인지 알고자 하는 수를, 2부터 그 수의 제곱근 까지 나누어 보았을 때 모든 경우에 나머지가 0이 아니어야 합니다. 7%6 = 1 > 소수입니다 9%3 = 0 > 소수가 아닙니다.
function prime(i) {
for (j = 2; j * j <= i; j++) {
if (i % j == 0) {
return false; }
}
return true;
}
소수인지 판별하고자 하는 수를 2부터 그 수의 제곱근까지 나누어보고
0인 경우가 없다면 그 수는 소수이므로 반환합니다. - for (i = a; i <= b; i++) {
arr.push(i);
if (i == 1) {
arr.pop();
}
m~n까지의 수를 리스트에 넣습니다.
1은 소수가 아니고, 1로는 무조건 나누어 떨어지기 때문에 따로 처리합니다. - if (i == b) {
m~n 까지의 수가 리스트에 전부 담겼다면,
(따로 떼어 내 걸러내는 것이 적절하지만, for문이 세 번 사용되는 것이 싫어 같이 처리했습니다. 나중에 코드 개선이 필요해 보입니다.)
let primeList = arr.filter((i) => prime(i));
filter 함수를 통해서 리스트에 소수만을 남깁니다. - if (primeList.length == 0) {
console.log(-1);
객체에 어떤 수도 남아있지 않을 경우 소수가 없다는 의미이므로 -1을 출력합니다. - } else {
let sum = 0;
primeList.forEach((x) => {
sum += x;
});
console.log(sum + "\n" + primeList[0]);
객체에 남아있는 소수의 합과 가장 작은 수인 첫번째 인덱스를 행을 나누어 출력합니다.
'백준 자바스크립트' 카테고리의 다른 글
[node.js] 1929 소수구하기 (자바스크립트) 기본수학단계2 (0) | 2022.06.14 |
---|---|
[node.js] 11653 소인수분해 (자바스크립트) 기본수학단계2 (0) | 2022.06.14 |
[node.js] 1978 소수 찾기 (자바스크립트) 기본수학단계2 (0) | 2022.06.06 |
[node.js] 10757 큰 수 A + B (자바스크립트) 기본수학단계1 (0) | 2022.06.05 |
[node.js] 2839 설탕배달 (자바스크립트) 기본수학단계1 (0) | 2022.06.04 |