https://www.acmicpc.net/problem/1929
(1) 내 답안
const input = require("fs")
.readFileSync("./example.txt")
.toString()
.trim()
.split("\n");
const [start, end] = input.shift().split(" ").map(Number);
const uniqueNum = Array.from({ length: end - start + 1 }, (v, i) => i + start);
uniqueNum.forEach((item, idx) => {
for (let i = 2; i <= Math.sqrt(item); i++) {
if (item % i == 0) {
uniqueNum[idx] = 0;
}
}
});
console.log(uniqueNum.filter((a) => a !== 0 d).join("\n"));
(2) 모범 답안
const input = require("fs")
.readFileSync("./example.txt")
.toString()
.trim()
.split("\n");
const [start, end] = input.shift().split(" ").map(Number);
const uniqueNum = [];
for (let num = start; num <= end; num++) {
if (num < 2) continue;
let isPrime = true;
for (let i = 2; i <= Math.sqrt(num); i++) {
if (num % i === 0) {
isPrime = false;
break;
}
}
if (isPrime) {
uniqueNum.push(num);
}
}
console.log(uniqueNum.join("\n"));
이 문제는 그냥 반복문을 두 개 돌리면 시간초과가 무조건 뜬다. 따라서 에라토스테네스의 체 방법을 사용해야 한다.
에라토스테네스는 아래의 gif로 간단 설명이 가능하다. (즉, 소수가 아닌 숫자를 지워 소수만 남기는 것이다.)
(1) 내 답안과 (2) 모범 답안의 차이는 시간 차이가 꽤나 난다. 되도록이면 (2) 방안으로 하는 것을 추천한다.
'코딩테스트 연습' 카테고리의 다른 글
[백준] 2606번 바이러스(JavaScript) (0) | 2024.01.17 |
---|---|
[백준] 1463번 1로 만들기 (JavaScript) (0) | 2024.01.16 |
[백준] 1260번 DFS와 BFS (JavaScript) (0) | 2024.01.16 |
[Softeer] 회의실 예약 (0) | 2023.09.21 |
[Softeer] 금고털이 (0) | 2023.09.20 |