백준 4948번 베르트랑 공준-JS

yugyeongKim·2021년 10월 22일
0

백준

목록 보기
21/52
post-custom-banner

- 제출한 코드

const { count } = require('console');
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');
let answer = '';
input.forEach((element,index) => {
    if(Number(element) === 0) {
        input.splice(index,1);
    }
});

let len = input.length;
for(let i=0; i < len; i++) {
    let N = Number(input[i]);
    let primeNum = new Array((2*N)+1);
    primeNum.fill(true);
    // console.log(primeNum.length);
    primeNum[0] = primeNum[1] = false;
    for(let n = 2; n <= Math.sqrt(N*2); n++) {
        if(primeNum[n]) {
            let x = 2;
            while(n * x <= N*2) {
                primeNum[n * x] = false;
                x++;
            }
        }
    }
    primeNum.splice(0,(N+1))
    console.log(primeNum);
    let count = 0;
    primeNum.forEach(element => {
        if(element) {
            count++;
        }
    });
    answer += count + '\n'
}
console.log(answer);

뭐시기 체 알고리즘문제와 유사하다. 그 대신 끝숫자를 2N으로 한다.
문제를 풀이하자면
1. 0부터 2N까지의 배열에서 소수를 구한다.(false로 바꾸는 것)
2. 그 배열에서 N까지를 잘라낸다.(그러면 N~2N배열이 됨)
3. 그 배열에서 값이 true인 것의 개수를 출력한다.

post-custom-banner

0개의 댓글