[BOJ] 1644. 소수의 연속합

레몬커드요거트·2026년 4월 15일

코딩테스트준비

목록 보기
44/66
post-thumbnail
const fs = require("fs");
const input = fs
  .readFileSync(process.platform === "linux" ? "dev/stdin" : "input.txt")
  .toString();

const N = Number(input);

function isPrime(num) {
  if (num < 2) {
    return false;
  }
  // 소수N은 제곱수를 기준으로 약수들이 대칭적 구조를 가짐
  for (let i = 2; i <= Math.sqrt(num); i++) {
    if (num % i === 0) {
      return false;
    }
  }
  return true;
}

const primeArray = [];
// N보다 작은 소수를 담은 배열
for (let i = 2; i <= N; i++) {
  if (isPrime(i)) {
    primeArray.push(i);
  }
}

//console.log(primeArray);

let startIdx = 0;
let endIdx = 0;
let currentSum = 0;
let count = 0;

while (endIdx <= primeArray.length) {
  if (currentSum === N) {
    count++;
    currentSum -= primeArray[startIdx];
    startIdx++;
  } else if (currentSum < N) {
    currentSum += primeArray[endIdx];
    endIdx++;
  } else if (currentSum > N) {
    currentSum -= primeArray[startIdx];
    startIdx++;
  }
}

console.log(count);

소수구하는 알고리즘

function isPrime(num) {
  if (num < 2) {
    return false;
  }
  // 소수N은 제곱수를 기준으로 약수들이 대칭적 구조를 가짐
  for (let i = 2; i <= Math.sqrt(num); i++) {
    if (num % i === 0) {
      return false;
    }
  }
  return true;
}

외우자

profile
비요뜨 최고~

0개의 댓글