[伯俊]1644小数の連続和-javascript
📌 質問する
https://www.acmicpc.net/problem/1644
📌 に答える
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");
let n = Number(input[0]);
// 에라토스테네스의 체
let primes = [];
let check = new Array(n + 1).fill(true);
for (let i = 2; i * i <= n; i++) {
if (!check[i]) continue;
for (let j = i * i; j <= n; j += i) {
check[j] = false;
}
}
for (let i = 2; i <= n; i++) {
if (check[i]) primes.push(i);
}
// 투포인터 탐색
let left = (sum = cnt = 0);
for (let right = 0; right < primes.length; right++) {
sum += primes[right];
while (sum > n) {
sum -= primes[left];
left++;
}
if (sum === n) cnt++;
}
console.log(cnt);
✔アルゴリズム:ダブルポインタ✔テストステロンのふるいを使用して入力値nまでの小数をprimes配列にすべて格納する
✔primes配列で、左、右をindex 0にして、ダブルポインタナビゲーションを開始します
✔rightを1に増やし、sum値をnに加算する場合は、個数を検索する必要があります.
✔sumがnより大きい場合、sumから左ポインタ値を減算し、左ポインタ1がnより小さいまで増加する
❗およびn未満の場合、for文は自動的に右ポインタを1つ追加しますので、条件文Xに入れる必要があります
✔sumがnの場合、cnt 1が増加
✔難易度:標準プラチナ3
Reference
この問題について([伯俊]1644小数の連続和-javascript), 我々は、より多くの情報をここで見つけました https://velog.io/@ywc8851/백준-1644-소수의-연속합-javascriptテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol