기억에 남고 , 유용할 것 같은 문제여서 따로 포스팅 합니다.
문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한 사항
- nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
- nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
3중 반복문을 이용하여 더해진 값의 결과가 소수인지 판별 후 소수라면 answer를 하나씩 증가시키는 구조
function solution(nums) {
var answer = 0;
//nums 에서 소수가 만들어지는 세가지의 수를 임의로 고름
//그 경우의 수 만큼 result는 올라감
//isPrime => 소수를 판별하게해줄수있는 공식
//매개변수 숫자 n을 받음
const isPrime = (n)=>{
//Math.sqrt()은 n의 제곱근을 반환함
for(let i = 2; i <= Math.sqrt(n); i++){
//나머지가 0이라면 i로 나누어떨어지므로 소수가 아님 -> false;
if(n % i === 0) return false;
//아니라면 소수이므로 true
}
return true;
}
// 중복하여 더하면 안되므로 i + 1 , j+ 1을 해주어 각각의 요소를 더할 수 있게함
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 ++){
var sum = nums[i] + nums[j] + nums[k] ;
//세가지를 더한 값 sum이 isPrime 함수에서 true가 된다면 answer 는 1씩 증가함
if(isPrime(sum)){
answer ++ ;
}
}
}
}
return answer;
}
소수인지 아닌지 구분하는 문제가 꽤 많았는데 이 방법을 이용하니 소수인지 아닌지 쉽게 판별이 가능하여 자주 , 유용하게 사용할 것 같다 !
'알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 Lv.1 - 추억 점수 (0) | 2024.03.26 |
---|---|
[알고리즘] 프로그래머스 Lv.1 - 신고 결과 받기 (0) | 2024.03.24 |
[알고리즘]프로그래머스 Lv.1 - 시저암호 (0) | 2024.03.22 |
[알고리즘]개인정보수집 유효기간(JS) (0) | 2024.03.12 |
[알고리즘] 프로그래머스 Lv.1 - 이상한 문자 만들기(JS) (0) | 2024.03.11 |