소수 찾기 - javascript

DonQ·2022년 4월 28일
0

CodingTest

목록 보기
24/33
post-thumbnail

문제 (출처)

https://www.acmicpc.net/problem/1978

나의 접근

  • 소수 관련 문제는 예전 자바를 배울때 해본적이 있어서 코드를 작성해보았다.

  • 소수를 찾기 위해 해당 숫자에서 나누는 숫자를 -1을 하며 나눠지는지 확인하는 방식으로 진행하였다.

  • 내가 한 방식보다 더 간단한 방식이 있어서 그것도 같이 소개 해보아야겠다.

풀이

나의 풀이

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().split('\n');

let length = +input[0];
let arr = input[1].split(' ').map(val => +val);
let count = 0;

for (let i = 0; i < length; i++){
    let div = arr[i]
    while (true){
        if(arr[i] === 1){
            break;
        }
        if(div === 2){
            count++
            break;
        }
        div--;
        if(arr[i] %  div === 0){
            break;
        }
    }
   
}
console.log(count);

모범답안

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 input = require('fs').readFileSync('/dev/stdin').toString().trim();

const [c, nums] = input.split("\n");

console.log(nums.split(" ").filter(v => isPrime(v)).length);

오늘의 배운점 및 교훈

  • 예전에 배울때 소수를 Math.sqrt()하여도 똑같은 결과를 얻을수 있고, 반복 횟수를 줄일수 있다고 배웠는데 그것 써먹지 못하였다...

  • 확실히 모범답안 나의 답안보다 훨씬 직관적이고 깔끔하다! 함수를 만들어서 문제를 해결하는 것은 굉장히 좋은 습관인것 같다.
    다음문제도 소수이던데, 거기에선 모범답안에 가깝게 직관적이고 성능도 좋게 풀어야겠다.

profile
꾸준히 쌓아가는 코딩 Study

0개의 댓글

관련 채용 정보