문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항- nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
- nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
nums | result |
---|---|
[1,2,3,4] | 1 |
[1,2,7,6,4] | 4 |
입출력 예 설명
입출력 예 #1
[1,2,4]를 이용해서 7을 만들 수 있습니다.
입출력 예 #2
[1,2,4]를 이용해서 7을 만들 수 있습니다.
[1,4,6]을 이용해서 11을 만들 수 있습니다.
[2,4,7]을 이용해서 13을 만들 수 있습니다.
[4,6,7]을 이용해서 17을 만들 수 있습니다.
내가 짜집기한 코드
//조합
const getCombinations = function (arr, selectNumber) {
const results = [];
if (selectNumber === 1) return arr.map((el) => [el]);
// n개중에서 1개 선택할 때(nC1), 바로 모든 배열의 원소 return
arr.forEach((fixed, index, origin) => {
const rest = origin.slice(index + 1);
// 해당하는 fixed를 제외한 나머지 뒤
const combinations = getCombinations(rest, selectNumber - 1);
// 나머지에 대해서 조합을 구한다.
const attached = combinations.map((el) => [fixed, ...el]);
// 돌아온 조합에 떼 놓은(fixed) 값 붙이기
results.push(...attached);
// 배열 spread syntax 로 모두다 push
});
return results; // 결과 담긴 results return
}
//소수 검사
const isPrime = (n) => {
for (let i = 2; i < n; i++) {
if (n % i === 0) {
return false;
}
}
return true;
}
function solution(nums) {
var answer = 0;
//조합 배열 만들기
let combinationArr = getCombinations(nums,3);
let totalArr = [];
//조합 배열 더한 배열 만들기
combinationArr.map((val)=>{
totalArr.push(val.reduce((sum,currVal) =>{return sum+currVal}));
})
//소수 검사
totalArr.map((val) => {
if (isPrime(val)){
answer++;
}
})
return answer;
}
내가 아는 소수는 0과 1사이의 그소수 밖에 없는데?
소수(素數, 발음: [소쑤], 문화어: 씨수, 영어: prime number)는 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수다. 예를 들어, 5는 1×5 또는 5×1로 수를 곱한 결과를 적는 유일한 방법이 그 수 자신을 포함하기 때문에 5는 소수이다.
소수 (수론) - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 각각의 자리에 놓인 숫자와 소수점을 통해 나타낸 실수(小數)에 대해서는 소수 (기수법) 문서를 참고하십시오. 좌측은 소수, 우측은 합성수. ...소수란 1보다 큰
ko.wikipedia.org
한 마디로 딱 나눠떨어지지 않고 1xN = N 인게 소수 라는거구만...
남이 만든 코드를 응용했다 구글링 능력+1을 얻었다...
'trouble shooting' 카테고리의 다른 글
알고리즘 연습문제23(시저 암호) (0) | 2022.09.27 |
---|---|
알고리즘 연습문제22(숫자 문자열과 영단어) (0) | 2022.09.27 |
알고리즘 연습문제20(문자열 내림차순으로 배치하기) (0) | 2022.09.26 |
알고리즘 연습문제19(문자열 내 마음대로 정렬하기) (0) | 2022.09.26 |
알고리즘 연습문제18(모의고사) (1) | 2022.09.26 |