백준 17103 JavaScript
수정하기
문서 생성 2021-11-09 21:24:49 최근 수정 2021-11-09 21:27:19
문제
풀이
다른 문제들 중 소수를 구하는 문제를 응용하면 된다. 중요한 것은 값을 반복하면서 순서만 다른 경우는 제외하기 위해 구하려는 짝수의 값을 2로 나눠준다. 반 이후는 순서만 반대되는 값이 나올 것이기 때문이다.
const readFileSyncPath = require('path').basename(__filename).replace(/js$/, 'txt');// const readFileSyncPath = '/dev/stdin';let input = require('fs').readFileSync(readFileSyncPath).toString().trim().split("\n");const T = parseInt(input[0]);let even = input.filter((v, i) => i !== 0).map(v => Number(v));// 소수 구하기let getPrimes = (num) => {let sieve = new Array(num).fill(true);for (let i = 2; i <= num; i++) {if (sieve[i]) {for (let j = i + i; j <= num; j += i) {sieve[j] = false;}}}return sieve;}// 가장 큰 값 기준으로 소수 목록 가져옴const primes = getPrimes(Math.max(...even));let result = '';even.forEach(val => {let cnt = 0;// 순서만 다른 경우 제외하기 위해 나누기 2for (let i = 2; i <= val / 2; i += 1) {if (primes[i] && primes[val - i]) {cnt++;}}result += `${cnt}\n`;});console.log(result);