풀이
김영준
function solution(nums) { let arr = []; let prime = 0; let count = 0; for(let i = 0; i < nums.length; i++){ for (let j = i + 1 ; j < nums.length; j++){ for(let k = j + 1; k < nums.length; k++){ let sum = nums[i] + nums[j] + nums[k]; // 2를 제외한 2의 배수는 소수가 아니다. if(sum % 2 !== 0){ arr.push(sum); // 만약 7이면 1 ~ 7까지 나눈다. for(let n = 1; n <= arr[0]; n++ ){ if(arr % n === 0) prime++; } } // 나누어지는 수가 2개면 소수 if( prime === 2) count++; // 값 초기화 arr=[]; prime = 0; } } } return count; }
이종현
function solution(nums) { let arr1 = []; let arr2 = []; let answer = 0; for (let i = 0; i < nums.length - 2; i++) { for (let j = i + 1; j < nums.length - 1; j++) { for (let k = j + 1; k < nums.length; k++) { let sum = nums[i] + nums[j] + nums[k]; if (sum % 2 !== 0) arr1.push(sum); for (let m = 1; m <= arr1[0]; m++) { if (arr1 % m === 0) arr2.push(m); } if (arr2.length === 2) answer++; arr1 = []; arr2 = []; } } } return answer; }
박노철
/* function isPrime(num){ let i =2; let n =num/2; while(i<=n){ if(num%i === 0)return false; i++; } return true; } */ function isPrime(num){ let i=2; let n=Math.sqrt(num); while(i<=n){ if(num%i===0)return false; i++; } return true; } function solution(nums) { //3중 for 문 10만 정도 let count=0; for(let i =0 ; i<nums.length; i++){ for(let j =i+1; j<nums.length; j++){ for(let k=j+1; k<nums.length; k++){ const sum=nums[i]+nums[j]+nums[k]; if(isPrime(sum))count++; } } } return count }
이민희
function getCombinationArrs(arr, cnt) { if (cnt === 1) return arr.map(number => [number]); const results = []; arr.forEach((number, idx) => { const rest = arr.slice(idx + 1); const attachedArrs = getCombinationArrs(rest, cnt - 1).map(restArr => [number, ...restArr]); results.push(...attachedArrs); }) return results; } function isPrime(n) { for (let i = 2; i <= Math.sqrt(n); i++) { if (n % i === 0) return false } return true; } function getSum(arr) { return arr.reduce((acc, cur) => acc + cur, 0); } function solution(nums) { return getCombinationArrs(nums, 3).reduce((acc, curArr) => isPrime(getSum(curArr)) ? acc + 1 : acc, 0); }
박건우
function solution(nums) { let answer = 0; const primeArr = Array.from({length : 3001}, () => true); // nums의 원소는 1000이하 이므로 3수를 더하면 3000을 넘지 않습니다. // 미리 소수를 구하지 않고 즉석에서 소수인지 아닌지 판별할 수 도 있습니다. // 근데 해당 문제는 최대 나올 수 있는 수를 알 수 있으므로 미리 구해줬습니다. // 즉석에서 구하는 방법써도 통과할 것 같습니다. for(let i = 2; i * i <= 3000; i++){ if(primeArr[i]){ for(let j = i * i; j<=3000; j+=i){ primeArr[j] = false; } } } function DFS(cnt, index, sum){ if(cnt >= 3){ if(primeArr[sum]){ answer++; } return; } for(let i = index; i<nums.length; i++){ DFS(cnt + 1, i + 1, sum + nums[i]); } } DFS(0, 0, 0); return answer; } // 삼총사 문제랑 유사합니다.
박주연
function isPrime(n) { if(n<2) return false; for(let i = 2; i<= Math.sqrt(n); i++){ if(n % i === 0) return false; } return true; } function combination(arr,num=3) { const result = []; if(num === 1) return arr.map((n) => [n]); arr.forEach((fixed, index, originArr)=>{ const rest = originArr.slice(index+1); const restCombination = combination(rest, num-1); const fullCombination = restCombination.map((value) =>[fixed,...value]); result.push(...fullCombination); }) result.map console.log(result) return result } function solution(nums) { let answer = 0; const cbArr = combination(nums); for(const i of cbArr){ let sum = i.reduce((a,b)=>a+b); if(isPrime(sum)) answer++; } return answer; }