🔗 문제 링크
https://www.acmicpc.net/problem/1644
✏️ 풀이
const N = Number(require('fs').readFileSync('/dev/stdin').toString().trim());
const isPrime = Array(N + 1).fill(true);
isPrime[0] = isPrime[1] = false;
for (let i = 2; i <= Math.sqrt(N); i++) {
for (let j = i * i; j <= N; j += i) {
isPrime[j] = false;
}
}
const primes = isPrime.reduce((acc, v, i) => {
if (v) {
acc.push(i);
}
return acc;
}, []);
let sum = 0;
let count = 0;
let i = 0;
let j = 0;
while (j < primes.length) {
sum += primes[j];
while (sum > N) {
sum -= primes[i];
i++;
}
if (sum === N) {
count++;
}
j++;
}
console.log(count);
먼저 1부터 N까지의 소수를 모두 구한 후에 투포인터를 활용하여 연속합이 N이 되는 경우의 수를 모두 세어 해결하였다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 2470 - Node.js] 두 용액 (0) | 2023.01.22 |
---|---|
[백준 1991 - Node.js] 트리 순회 (0) | 2023.01.12 |
[백준 1806 - Node.js] 부분합 (0) | 2023.01.11 |
[백준 15565 - Node.js] 귀여운 라이언 (0) | 2023.01.11 |
[백준 20922 - Node.js] 겹치는 건 싫어 (0) | 2023.01.10 |