Dandy Now!
  • [JavaScript] every 배열 메서드를 활용한 소수(prime) 판별
    2023년 11월 18일 20시 57분 38초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

    1. 코테 문제 풀다가...

    프로그래머스 코테 문제 "소수 만들기"를 풀이하고 있었다. 나의 경우 동일한 문제를 파이썬과 자바스크립트로 각각 풀이해오고 있다. 이 문제를 해결하기 위해 주어진 숫자가 소수인지를 판별해야 해서 소수 판별을 위한 함수를 정의하였다. 해당 파이썬 코드는 다음과 같다.

    # 소수 판별 - 파이썬
    def is_prime_num(n):
        for i in range(2, n):
            if n % i == 0:
                return False
        return True

    인자로 들어온 숫자가 소수이면 True, 아니면 False를 리턴하는 파이썬 문법의 함수인데, 자바스크립트에서 for문을 이용하지 않고 작성하고자 하였다.

    😉 소수는 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수다. 

     

    2. every 배열 메서드를 이용한 소수 판별 코드

    for문의 경우 특정 조건에서 break로 반복을 벗어날 수 있다. 또한 위 코드처럼 함수 안에서 돌고 있는 for문은 return으로도 빠져나올 수도 있다. 물론 자바스크립트에도 for문이 존재하고 동일한 방식이 적용 가능하다. 하지만 배열 메서드를 이용해 동일한 결과를 얻고자 한다.

    배열 메서드 중  forEach는 배열의 요소를 순회하는 대표적인 메서드이다. 아쉬운점은 for문의 break, return과 같은 문법을 제공하지 않는다. 하지만 some, every를 이용하면 유사한 효과를 낼 수 있다. some은 배열 요소가 순회할 때 해당 요소가 어떤 조건에 하나라도 충족되면 순회를 멈추고 true를 반환한다. every는 한 요소라도 어떤 조건에 충족이되지 않으면 false를 반환하고 순회를 멈춘다.

    아래 자바스크립트 코드는 every 배열 메서드를 이용했는데 소수 판별 대상이 되는 숫자 n을 2부터 n-1에 해당하는 숫자로 나눠 나머지가 0이 아닌 경우 true를 반환한다. 만약 한 요소라도 나머지가 0이라면 순회를 멈추고 false를 반환한다.

    // 소수 판별 - 자바스크립트
    const isPrimeNum = (n) => {
        const range = Array.from({ length: n - 2 }, (_, i) => i + 2);
        const result = range.every((v, i) => {
          return n % v !== 0;
        });
        return result;
    };
    728x90
    반응형
    댓글