const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');
let answer = '';
let T = Number(input.shift());
for(let i=0; i < T; i++) {
let N = Number(input[i]);
let primeArr = new Array(N+1);
primeArr.fill(true);
primeArr[0] = primeArr[1] = false;
for(let n = 2; n <= Math.sqrt(N); n++) {
if(primeArr) {
let m = 2;
while (n * m <= N) {
primeArr[n * m] = false;
m++;
}
}
}
let result = []; //N의 소수 배열
primeArr.forEach((element,index) => {
if(element) {
result.push(index);
}
});
let resultLen = result.length;
let semiArr = [];
for(let x=resultLen; x > 0; x--) {
let resultGap = N - result[x];
if(result.includes(resultGap)) {
semiArr.push(resultGap);
}
}
let semiLen = semiArr.length;
if(semiLen === 2) {
answer += semiArr[0] + ' ' + semiArr[1] + '\n';
} else if((semiLen%2) === 0) {
answer += semiArr[(semiLen/2)-1] + ' ' + semiArr[semiLen/2] + '\n';
} else {
answer += semiArr[Math.floor(semiLen/2)] + ' ' + semiArr[Math.floor(semiLen/2)] + '\n';
}
}
console.log(answer);
장황하고 시간오래걸리고 메모리도 많이 든다. 다른사람들 거 많이 보자
일단 과정들을 설명하면
1. 테스트 케이스를 반복하는 for문을 작성
2. 숫자N(input배열의 숫자)의 소수를 구해 result변수에 넣는다.(앞 게시물 참고)
3. 소수 중 N-result[i] 값이 result변수들 중 하나의 값과 같다면, semiArr에 넣는다.(작은수부터 넣기 위해 배열의 길이부터0까지 1씩 빼주는 for문 작성)
4. semiArr배열 길이가 2이면 그 두개를 출력, 길이가 2가 아닌 짝수이면 가운데 두 값을 출력, 그것도 아니면(길이가 홀수) 가운데 값을 두번 출력