문제
제한 사항
입출력 예
풀이
let input = require('fs').readFileSync('/dev/stdin').toString().trim();
const isPrime = (n) => {
if (n === 1 || n === 0) return false;
if (n === 2) return true;
for (let i = 2; i <= Math.ceil(Math.sqrt(n)); i++) {
if (n % i === 0) {
return false;
}
}
return true;
};
const sol = (input) => {
let cnt = 0;
const N = +input;
const arr = new Array(N + 1)
.fill(0)
.map((e, i) => (e = i))
.filter((e) => isPrime(e));
let lt = 0;
let rt = 1;
let sum = arr[lt];
while (lt < arr.length && rt < arr.length) {
if (sum === N) {
cnt++;
sum += arr[rt++];
} else if (sum > N) {
sum -= arr[lt++];
} else {
sum += arr[rt++];
}
}
if (arr[arr.length - 1] === N) {
cnt++;
}
return cnt;
};
console.log(sol(input));
- 아래 코드론 해결이 안됐는데 왜 그런지 모르겠다.
let input = require('fs').readFileSync('/dev/stdin').toString().trim();
const isPrime = (n) => {
if (n === 1) return false;
if (n === 2) return true;
for (let i = 2; i <= Math.ceil(Math.sqrt(n)); i++) {
if (n % i === 0) {
return false;
}
}
return true;
};
const sol = (input) => {
let cnt = 0;
const N = +input;
const arr = new Array(N + 1)
.fill(0)
.map((e, i) => (e = i))
.filter((e) => isPrime(e));
let lt = (rt = 0);
let sum = 0;
while (lt < arr.length && rt < arr.length) {
sum += arr[rt++];
if (sum === N) {
cnt++;
}
while (sum >= N) {
sum -= arr[lt++];
if (sum === N) {
cnt++;
}
}
}
return cnt;
};
console.log(sol(input));