삼각수(Triangular Number)란?
삼각수는 점들을 정삼각형 모양으로 배열했을 때 그 삼각형을 가득 채울 수 있는 점의 개수를 의미합니다. 즉, 1부터 n까지의 자연수를 차례대로 더한 값(1, 3, 6, 10, 15, 21 ...)이 바로 삼각수입니다.
예를 들어 9는 삼각수입니다. 한 변의 길이가 4인 정삼각형을 만들기 위해 필요한 점의 개수가 정확히 9개이기 때문입니다.

문제
하나의 숫자를 입력받아, 해당 숫자가 삼각수이면 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
정리
반복문을 사용하는 방법은 직관적이고 이해하기 쉬운 반면, 완전제곱수 공식을 활용하는 방법은 매우 큰 숫자에 대해서도 빠르게 판별할 수 있다는 장점이 있습니다. 상황에 맞게 적절한 방법을 선택해 사용하시기 바랍니다.