[프로그래머스] javascript - 풀이2

summer_joy·2023년 1월 18일
0

문제설명

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
  • nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.

입출력 예 설명

입출력 예 #1

[1,2,4]를 이용해서 7을 만들 수 있습니다.

입출력 예 #2

[1,2,4]를 이용해서 7을 만들 수 있습니다.
[1,4,6]을 이용해서 11을 만들 수 있습니다.
[2,4,7]을 이용해서 13을 만들 수 있습니다.
[4,6,7]을 이용해서 17을 만들 수 있습니다.

문제풀이

소수는 1과 자기 자신으로만 나누어지는 수를 의미한다.
먼저 소수인지 아닌지를 판별하는 함수를 하나 만들고, 전달받은 매개변수 값이 소수인지를 판별하기 위해서는 매개변수 값의 제곱근까지의 숫자들에 대해 나누어 떨어지는 값이 있다면 소수가 아니고, 없다면 소수라고 판단하여 반환한다.

매개변수 nums 배열에서 3가지 숫자를 더하여 새로운 수를 만들어내는 과정을 반복문을 사용하여 모든 숫자를 거치며 만들어낼 수 있는 숫자를 만들어내고, 만들어진 숫자를 미리 작성해둔 소수 판별 함수를 사용하여 소수인지 판별한다.

소수라면 answer의 값을 1씩 증가시켜준 뒤, 최종적으로 소수가 되는 경우의 개수를 반환한다.

해답코드

function solution(nums) {
    let answer = 0;
    
    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++) {
                if (isPrime(nums[i] + nums[j] + nums[k])) {
                    answer++;
                }
            }
        }
    }
    
    return answer;
}

const isPrime = (n) => {
    for (let i = 2; i <= Math.sqrt(n); i++) {
        if (n % i === 0) {
            return false;
        }
    }
    return true;
}
profile
💻 Hello world

0개의 댓글