2023. 10. 14. 18:31ㆍ코딩 테스트 (BOJ)
https://www.acmicpc.net/problem/1929
1929번: 소수 구하기
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
www.acmicpc.net
문제 해석
이번 문제는 입력받은 M과 N 사이의 모든 소수들을 출력해주면 되는 아주 단순한 문제이다.
소수를 구하면 되니 에라토스테네스의 체를 이용하면 매우 효율적으로 구할 수 있다.
에라토스테네스의 체에 관해서는 이전 [소수 찾기] 문제에서 다룬적이 있다.
그런데 바로 지난 문제인 [다음 소수]를 풀며 깨달은 점은 내가 소수 찾기 문제에서 사용했던 에라토스테네스의 체는 반쪽짜리도 안되는 알고리즘이었다는 것이다.
그 이유는 에라토스테네스의 체의 장점은 검사할 약수의 개수를 비약적으로 줄이는 것에 있는데 예전 소수 찾기 문제 풀이 포스팅에서는 이를 활용하지 않고 에라토스테네스의 체라며 우긴 꼴이였다.
에라토스테네스의 정의에 관해서는 아래 [소수 찾기]와 [다음 소수] 포스팅을 읽고 오면 이해할 수 있을 것이다.
[백준/BOJ] 1978번 소수 찾기 (Javascript/Node js)
1978번: 소수 찾기 (acmicpc.net) 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 문제풀이 처음에는 N
dnd0707.tistory.com
[백준 / BOJ] 4134번 다음 소수 (Javascript / Node js)
https://www.acmicpc.net/problem/4134 4134번: 다음 소수 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. www.acmicpc.net 문제 해석 문제 자체는 간
dnd0707.tistory.com
전체 코드
const fs = require("fs");
const input = fs.readFileSync("../input.txt").toString().trim().split("\n").map(item => Number(item));
input.shift();
const prime = (n) => {
if(n < 2){
return false;
}
for(let i=2; i<= Math.sqrt(n); i++){ // i * i < n 으로 범위를 잡는 대신 i < sqrt(n) 으로 범위를 잡았다
if(n % i == 0){
return false;
}
}
return true;
}
let answer = [];
for(let i of input){
while(!prime(i)){
i++;
}
answer.push(i);
}
console.log(answer.join("\n"));
특히나 for문의 실행 범위에 대한 설명은 이전 포스팅 [다음 소수]에 자세히 나와있다.
'코딩 테스트 (BOJ)' 카테고리의 다른 글
[백준 / BOJ] 17103번 골드바흐 파티션 (Javascript / Node js) (0) | 2023.10.21 |
---|---|
[백준 / BOJ] 4948번 베르트랑 공준 (Javascript / Node js) (0) | 2023.10.21 |
[백준 / BOJ] 4134번 다음 소수 (Javascript / Node js) (0) | 2023.10.13 |
[백준 / BOJ] 2485번 가로수 (Javascript / Node js) (0) | 2023.10.12 |
[백준/BOJ] 1735번 분수 합 (Node js / Javascript) (0) | 2023.10.10 |