문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한 조건
- nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
- nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
📄 문제
function solution(nums) {
var answer = -1;
return answer;
}
💻 공부 후 코드
// 소수를 구할 함수를 만든다.
// 2이하일땐 false, 2부터 n의 제곱근까지 n을 인덱스로 나누었을때 나눠지면 false
// 경우의 수 초기값 설정
// 3중 반복문으로 배열의 3가지 숫자를 더할수 있는 모든 경우의 수를 구하고
// 그 합계들을 소수를 구할수있는 함수에 넣어 true면 경우의 수를 증가
// 경우의 수를 반환한다.
const isPrimeNumber = (n) => {
if (n < 2) return false;
for (let i = 2; i <= Math.sqrt(n); i++) {
if (n % i === 0) return false;
}
return true;
}
function solution(nums) {
let count = 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 (isPrimeNumber(sum)) count++;
}
}
}
return count;
}
📚 배운 점
소수의 조건
- 2보다 크다.
- For loop 에서 2부터 n의 제곱근 까지 반복할 때 n % i === 0 이면 소수가 아니다.
모든 경우의 수
- 3중 반복문을 사용할 땐 index의 최대 범위를 안쪽에서 부터 -1씩 줄여 나가야한다.