[Lv.1] 소수 구하기

Jihyun-Jeon·2022년 3월 16일
0

문제 : https://programmers.co.kr/learn/courses/30/lessons/12977

🔶 내가 한 방법

  1. 소수 구하는 함수를 만든다.
  2. 중복없는 3개의 숫자 더할 수 있는 함수를 만든다.
  3. 2번 함수에서 1번 함수를 실행하여 소수인 경우의 수를 계산한다.
  • 시도1 - 소수 구하는 함수 오류남
function Prime(num) {
  if (num === 1 || num === 2 || num === 3 || num === 5 || num === 7) {
    return true;
  } else if (num % 2 && num % 3 && num % 5 && num % 7) {
    return true;
  }
}
function solution(arr) {
  let cnt = 0;

  for (let i = 0; i < arr.length; i += 1) {
    for (let j = i + 1; j < arr.length; j += 1) {
      for (let p = j + 1; p < arr.length; p += 1) {
        const num = arr[i] + arr[j] + arr[p];
        if (Prime(num)) {
          cnt += 1;
        }
      }
    }
  }
  return cnt;
}

console.log(solution([1, 2, 7, 6, 4])); // 4

🔶 다른 사람이 한 방법

  • 시도2 - 소수 구하는 법 검색해서 코드 가져옴.
function isPrime(num) {
  if (num === 2) {
    return true;
  }

  for (let i = 2; i <= Math.floor(Math.sqrt(num)); i += 1) {
    if (num % i === 0) {
      return false;
    }
  }
  return true;
}

function solution(arr) {
  let cnt = 0;
  for (let i = 0; i < arr.length; i += 1) {
    for (let j = i + 1; j < arr.length; j += 1) {
      for (let p = j + 1; p < arr.length; p += 1) {
        const num = arr[i] + arr[j] + arr[p];
        //
        if (isPrime(num)) {
          cnt += 1;
        }
        //
      }
    }
  }
  return cnt;
}
console.log(solution([1, 2, 7, 6, 4])); // 4

🔶 피드백

  • 소수 구하는 방법 공부
function isPrime(num) {
 // 1. 1은 소수가 아니다
    if (num === 1) {
    return false;
  }
  
 // 2. 제곱근이 1인 숫자는 무조건 소수다.
 // 3. 해당 숫자를 "2~제곱근"으로 나눈 것 중 하나라도 나머지가 0이 나오면 소수가 아님.
  for (let i = 2; i <= Math.sqrt(num); i += 1) {
    if (num % i === 0) {
      return false;
    }
  }
  
 // 4. 나머지가 0이 나오는게 없으면, 소수다.
  return true;
}
num / 제곱근( Math.sqrt(num) )
 1  /  1
 2  /  1.4142135623730951
 3  /  1.7320508075688772
 4  /  2
 5  /  2.23606797749979
 6  /  2.449489742783178
 7  /  2.6457513110645907
 8  /  2.8284271247461903
 9  /  3
 10  /  3.1622776601683795
 11  /  3.3166247903554
 12  /  3.4641016151377544
 13  /  3.605551275463989
 14  /  3.7416573867739413
 15  /  3.872983346207417
 16  /  4

0개의 댓글