[프로그래머스] 소수 만들기

·2023년 11월 20일
1

Algorithm

목록 보기
5/16
post-thumbnail

소수 만들기

문제 설명

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

제한사항

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

solution code

function solution(nums) {
  let answer = 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];
        let isPrime = true;
        for (let m = 2; m <= Math.sqrt(sum); m++) {
          if (sum % m === 0) {
            isPrime = false;
            break;
          }
        }
        if (isPrime) answer++;
      }
    }
  }
  return answer;
}

약수의 개수를 구하는 문제와 반대로 합성수인지 아닌지는 약수가 1과 자기 자신을 제외한 하나라도 있는지 확인하면 되므로 모듈러 연산 반복부분을 전부 수행할 필요가 없다. 따라서 약수를 하나라도 구하면 반복문을 빠져나오도록 한다.

그치만 3중 for문은 좀..

0개의 댓글