주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
function solution(nums) {
let answer = 0;
let sum = 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) {
sum = nums[i] + nums[j] + nums[k]
if (isPrimeNumber(sum)) answer++
}
}
}
return answer;
}
function isPrimeNumber(num) {
const end = Math.sqrt(num);
for (let i = 2; i <= end; ++i) {
if (num % i === 0) return false;
}
return true
}
소수 문제가 나와서 에라토스테네스의 체가 떠오르긴 했지만, 기억나지 않아 전에 풀었던 소수 찾기 문제를 다시 찾아보고 풀이를 시작했다. 우선 소수를 판별해주는 함수를 만들고, 3개의 숫자가 겹치지않게 3개의 반복문을 구성하면서 정확히 나오는지 로그도 찍어보고 확인해 완성시켰다.
3개의 숫자를 더한다는 규칙이 있어서 난이도가 낮은 것이라고 생각된다.
참고 자료 및 사이트 (감사합니다)