알고리즘 소수만들기
문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
조합을 사용해서 풀면 확장성이 좋은데 재귀함수 부분에서 이해가 안되서 for문을 돌려서 풀었다... 조합은 좀더 공부해서 추가할 예정!..
function solution(nums) {
var answer = 0;
let sums = [];
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++) {
sums.push(nums[i] + nums[k] + nums[j]);
}
}
}
sums.forEach((sum) => {
if (checkSum(sum)) answer++;
});
return answer;
}
function checkSum(num) {
for (let i = 2; i < num; i++) {
if (num % i === 0) return false;
}
return true;
}
- 3개더한 합을담는 sums array를 만든다
- for문 돌면서 push 해준다
- i+1, j+1 이런식으로 짠건 중복되는 경우는 더해서 sums에 넣어줄 필요 없기 때문이다 1,2,3 더하나 3,2,1더하나 같기때문
- sums 를 돌면서 소수인지 아닌지 확인해준다 true를 return 하면 answer에 1을 더해준다
- 소수는 1과 자기자신을 제외하고는 나누어떨어지지 않는 수 이므로
2부터 자기자신 전까지 돌면서 나머지가 0인지 아닌지 확인해야 한다
하나라도 나누어 떨어지면 return false해서 함수를 종료시켜준다
다 통과하면 return true해준다
- 소수판별함수에서 for문 돌 때 제곱근을 사용할 수 있는데 아직 이해가 되지 않아서 전달받은 숫자 앞까지 돌았다
Author And Source
이 문제에 관하여(알고리즘 소수만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@chuhyerin96/알고리즘-소수만들기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)