Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트로 프로닉 수(Pronic Number) 판별하는 방법

프로그래밍 문제나 코딩 테스트에서는 특정한 수학적 성질을 가진 숫자를 판별해야 하는 경우가 종종 있습니다. 이번 글에서는 두 개의 연속된 정수의 곱으로 표현되는 프로닉 수(Pronic Number)를 자바스크립트(JavaScript)로 판별하는 함수를 만들어 보겠습니다.

프로닉 수(Pronic Number)란?

프로닉 수는 두 개의 연속된 정수를 곱했을 때 얻어지는 수를 말합니다. 즉, 다음과 같은 형태로 표현되는 숫자입니다.

n(n + 1)

예를 들어 12는 3 × 4의 결과이므로 프로닉 수에 해당합니다. 처음 몇 가지 프로닉 수를 나열하면 다음과 같습니다.

  • 0 = 0 × 1
  • 2 = 1 × 2
  • 6 = 2 × 3
  • 12 = 3 × 4
  • 20 = 4 × 5
  • 30 = 5 × 6
  • 42 = 6 × 7

자바스크립트 구현 코드

숫자를 하나 입력받아 해당 숫자가 프로닉 수이면 true, 그렇지 않으면 false를 반환하는 함수를 작성해 보겠습니다.

const num = 132;

const isPronic = num => {
  let nearestSqrt = Math.floor(Math.sqrt(num)) - 1;
  while (nearestSqrt * (nearestSqrt + 1) <= num) {
    if (nearestSqrt * (nearestSqrt + 1) === num) {
      return true;
    }
    nearestSqrt++;
  }
  return false;
};

console.log(isPronic(num));

출력 결과

true

132는 11 × 12로 표현할 수 있으므로 프로닉 수이며, 콘솔에는 true가 출력됩니다.

코드 동작 원리

  1. 제곱근 계산: Math.sqrt()로 입력값의 제곱근을 구한 뒤 Math.floor()로 소수점을 버리고 1을 빼서 탐색 시작점을 정합니다.
  2. 반복 검사: while 루프 안에서 현재 값 n과 n + 1의 곱이 입력값보다 작거나 같은 동안 반복하며, 곱이 정확히 일치하면 true를 반환합니다.
  3. 최종 판별: 루프가 모두 끝날 때까지 일치하는 값이 없다면 프로닉 수가 아니므로 false를 반환합니다.

더 간결한 대안 코드

프로닉 수 n(n + 1)은 항상 n²과 (n + 1)² 사이에 존재하기 때문에, 제곱근의 정수 부분만 확인해도 충분합니다. 다음과 같이 반복문 없이 더 간단하게 작성할 수도 있습니다.

const isPronic = num => {
  const n = Math.floor(Math.sqrt(num));
  return n * (n + 1) === num;
};

console.log(isPronic(132)); // true
console.log(isPronic(100)); // false

이 방식은 한 번의 계산만으로 판별할 수 있어 코드가 간결할 뿐만 아니라 성능 면에서도 유리합니다.