[백준 | Javascript] 1978

박기영·2022년 6월 28일
0

백준

목록 보기
62/127
post-custom-banner

기본 수학 2. 1단계
1978번. 소수 찾기

문제

1978번 문제 링크

solution

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");

let data = input[1].split(" ").map((x) => Number(x));

// 소수 판별을 위한 함수
// filter() 메서드를 사용하므로 true, false로 반환
// true만 남기고 나머지는 제거하여 새로운 배열을 만들어준다.
const checkAns = (num) => {
  // 1은 소수가 아니므로 false 반환
  if(num === 1){
    return false;
  }
  
  // num을 2부터 num까지의 숫자로 나눠본다.(기본 원리)
  // 아래는 num의 sqrt(num)까지만 확인하는 방법이다.(해설 링크 참고)
  for (let i = 2; i*i <= num; i++){
    // 나눠지는 값이 하나라도 있다면 소수가 아니므로 false 반환
    if(num % i === 0){
      return false;
    }
  }
  
  // 위 조건들에 해당이 없다면 소수가 아니므로 true 반환
  return true;
}

// 소수만 남긴 배열 생성
const answer = data.filter((num) => checkAns(num));

// 배열의 길이 = input에 들어있는 소수의 개수
console.log(answer.length);

해설

입력 첫 째 줄에 주어지는 반복 횟수에 얽매이지 않아도 된다.
소수 판별에 쓰이는 다양한 방법이 있는데 이 곳의 풀이 3을 참고하자.
자바로 푸셨지만 이런 방법도 있다는 것을 알게됐다.
for보다는 메서드를 사용하는 것이 훨씬 빠르기 때문에 메서드를 사용하는 풀이들을 보고 하루 빨리 익숙해지는 것이 좋을 것이라 생각된다.

profile
나를 믿는 사람들을, 실망시키지 않도록
post-custom-banner

0개의 댓글