본문 바로가기
알고리즘/Codewars

[Codewars] Is a number prime? (6 kyu) / JavaScript

by fluss 2022. 10. 4.

https://www.codewars.com/kata/5262119038c0985a5b00029f

 

Codewars - Achieve mastery through coding practice and developer mentorship

Coding practice for all programming levels – Join a community of over 3 million developers and improve your coding skills in over 55 programming languages!

www.codewars.com

 

DESCRIPTION:

Define a function that takes an integer argument and returns a logical value true or false depending on if the integer is a prime.

Per Wikipedia, a prime number ( or a prime ) is a natural number greater than 1 that has no positive divisors other than 1 and itself.

 

Requirements

  • You can assume you will be given an integer input.
  • You can not assume that the integer will be only positive. You may be given negative numbers as well ( or 0 ).
  • NOTE on performance: There are no fancy optimizations required, but still the most trivial solutions might time out. Numbers go up to 2^31 ( or similar, depending on language ). Looping all the way up to n, or n/2, will be too slow.

 

Example

is_prime(1)  /* false */
is_prime(2)  /* true  */
is_prime(-1) /* false */

 

설명:

받은 정수가 소수인지에 따라 논리 값 true 혹은 false를 반환하는 함수를 정의하세요.

위키피디아에 따르면 소수는 1보다 큰 자연수중 1과 자기 자신만을 약수로 가지는 수입니다.

요구 사항

  • 정수 입력이 주어진다고 가정할 수 있습니다.
  • 양수만 입력된다고 가정할 수 없습니다. 음수가 주어질수도 있습니다 (또는 0 ).
  • NOTE on performance: 복잡한 최적화가 요구되지는 않지만, 가장 간단한 해답은 시간 초과가 될 수 있습니다. 숫자는 최대 2^31 ( 또는 언어에 따라서 비슷한 숫자까지)입니다. n, 또는 n/2까지 순환하는 것은 너무 느립니다.

Example

is_prime(1)  /* false */
is_prime(2)  /* true  */
is_prime(-1) /* false */
 

풀이

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

수가 수를 나누기 위해서는 그 몫이 항상 필요하며 나누는 수와 몫 중 어느 하나는 반드시 √n 이하여야 하므로 √n까지만 확인하면 된다.

 

참고

https://ko.wikipedia.org/wiki/%EC%86%8C%EC%88%98_(%EC%88%98%EB%A1%A0) 

댓글