JS) BoJ 1978 소수 찾기

반응형

문제

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

입력

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

출력

주어진 수들 중 소수의 개수를 출력한다.

예제 입력 1 복사

4 1 3 5 7

예제 출력 1 복사

3

 

 

1000 이하의 소수들만 주기 때문에

1000 이하 소수를 모두 구하고

비교해보면 된다.

 

 

// 입력
const fs = require('fs');
const filePath = process.platform === 'linux'? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().split('\n');
// 숫자 갯수
let caseNum = parseInt(input.shift()); 
// 입력 숫자들
let numbers = input[0].split(' ').map(item=>+item);

// 1000이하 소수 모두 array에 넣기
let primeNum = [2];
let last = 1; // 소수 array 마지막 숫자
let num = 3;
let isPrime = true;

// 소수 array 만드는 반복문
while (last<1000) { // 소수 마지막 수가 1000 이하일 때만 반복
  for (let i = 2; i < num; i++) {
    // num 보다 작은 수로 나눠서 나누어 떨어지면 소수가 아님
    if(num%i == 0) { 
      isPrime = false; // 소수가 아님
      break;
    }
  }
  // 반복문이 break 해서 소수라면 
  if(isPrime == true) {
    last = num;
    primeNum.push(num); // +를 쓰지말고 push를 쓰자!
    // +를 쓰면 string화가 되는지 1이 인식됨
  }
  // 다시 isPrime 값을 true로 바꿔줘서 반복문을 돌 수 있게 함
  isPrime = true;
  num++;
}

// 소수 array에 숫자가 있는지 확인
let answer = 0;
for (let i = 0; i < numbers.length; i++) {
  // 배열에 들어있는지 확인
  let isIn = primeNum.includes(numbers[i]);
  // true라면 갯수 증가
  if (isIn) answer++;
}

console.log(answer);

 

 

내 코드가 너무 긴 거 같아서 좀 줄이려고 생각하면서 풀어봐야겠다.

 

알고리즘 건들지도 않았을 때 이거보고 정말 어렵다는 생각을 했는데,

그런 쪽 생각을 안해봐서 그랬던 것 같다.

반응형

'Algorithm > Baekjoon' 카테고리의 다른 글

JS) BoJ 1157 단어 공부  (0) 2021.07.31
JS) BoJ 1929 소수 구하기/ 에라토스테네스의 체  (0) 2021.07.31
JS) BoJ 1546 평균  (0) 2021.07.30
JS) BoJ 2920 음계  (0) 2021.07.30
JS) BoJ 10809 알파벳 찾기  (0) 2021.07.30