백준 2581번 소수 - Node.js

프동프동·2022년 6월 1일
0

알고리즘 - Node.js

목록 보기
24/116
post-thumbnail

소수

문제

자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.

예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다.

입력

입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.

M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다.

출력

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.

단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

예제 입력 1

60
100

예제 출력 1

620
61

예제 입력 2

64
65

예제 출력 2

-1

해결 방법

  1. N과 M을 받는다.
  2. N부터 M까지 순회하며 해당 값이 소수인지 확인한다.
  3. 만약 소수가 없으면 -1을 출력한다.
  4. 소수일 경우 배열에 추가해준다.
  5. 소수로만 만들어진 배열의 각 인덱스를 모두 더해준 후 출력한다.
  6. 소수로만 이루어진 배열에서 최솟값을 구한 후 출력한다.
let fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split('\n');

let N = Number(input[0]);	// 1
let M = Number(input[1]);

let primeArray = new Array(0);

function isPrime(number) {	// 2
  if (number < 2) {
    return false;
  }
  for (let i = 2; i < number; i++) {
    if (number % i == 0) {
      return false;
    }
  }
  return true;
}

for (let i = N; i <= M; i++) {
  if (isPrime(i)) {
    primeArray.push(i);		// 4
  }
}
if (primeArray.length === 0) {	// 3
  console.log('-1');
} else {
  let total = 0;
  for (const element of primeArray) {	// 5
    total += element;
  }
  console.log(`${total}\n${Math.min(...primeArray)}`);	//5, 6
}
profile
좋은 개발자가 되고싶은

0개의 댓글