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

JavaScript로 숫자가 삼각수(Triangular Number)인지 판별하는 방법

삼각수(Triangular Number)란?

삼각수는 점들을 정삼각형 모양으로 배열했을 때 그 삼각형을 가득 채울 수 있는 점의 개수를 의미합니다. 즉, 1부터 n까지의 자연수를 차례대로 더한 값(1, 3, 6, 10, 15, 21 ...)이 바로 삼각수입니다.

예를 들어 9는 삼각수입니다. 한 변의 길이가 4인 정삼각형을 만들기 위해 필요한 점의 개수가 정확히 9개이기 때문입니다.

JavaScript로 숫자가 삼각수(Triangular Number)인지 판별하는 방법

문제

하나의 숫자를 입력받아, 해당 숫자가 삼각수이면 true를, 그렇지 않으면 false를 반환하는 자바스크립트 함수를 작성해야 합니다.

방법 1: 반복문을 이용한 해결

삼각수는 1 + 2 + 3 + ... 처럼 연속된 자연수의 합으로 표현되므로, 누적합이 입력값에 도달할 때까지 더해가며 비교하면 됩니다.

const num = 9;

const isTriangular = (num = 1) => {
  let sum = 0;
  let n = 1;

  // 누적합이 num 이상이 될 때까지 1씩 증가시키며 더함
  while (sum < num) {
    sum += n;
    n++;
  }

  // 정확히 일치하면 삼각수
  return sum === num;
};

console.log(isTriangular(num));

방법 2: 수학 공식을 이용한 해결

더 효율적인 방법도 있습니다. 어떤 수 num이 삼각수일 조건은 8 × num + 1이 완전제곱수라는 것입니다. 이 성질을 이용하면 반복문 없이 O(1) 시간 복잡도로 판별할 수 있습니다.

const isTriangular = (num = 1) => {
  const check = 8 * num + 1;
  const sqrt = Math.floor(Math.sqrt(check));
  return sqrt * sqrt === check;
};

console.log(isTriangular(9));  // true
console.log(isTriangular(10)); // true
console.log(isTriangular(7));  // false

출력 결과

true

정리

반복문을 사용하는 방법은 직관적이고 이해하기 쉬운 반면, 완전제곱수 공식을 활용하는 방법은 매우 큰 숫자에 대해서도 빠르게 판별할 수 있다는 장점이 있습니다. 상황에 맞게 적절한 방법을 선택해 사용하시기 바랍니다.