이 글에서는 수열 1·2·3 + 2·3·4 + … + n(n+1)(n+2)의 첫 n항까지의 합을 구하는 방법을 알아봅니다. 여기서 1·2·3은 첫 번째 항, 2·3·4는 두 번째 항을 의미합니다.
먼저 예시를 통해 개념을 쉽게 이해해 보겠습니다.
입력: n = 5 출력: 420
풀이 설명
n = 5인 경우 각 항을 모두 더하면 다음과 같습니다.
1·2·3 + 2·3·4 + 3·4·5 + 4·5·6 + 5·6·7 = 6 + 24 + 60 + 120 + 210 = 420
공식 유도 과정
이 수열의 n번째 항은 n(n+1)(n+2)이며, 이를 전개하면 다음과 같습니다.
n(n+1)(n+2) = n(n² + 3n + 2) = n³ + 3n² + 2n
이제 잘 알려진 거듭제곱 합 공식을 활용합니다.
- n번째 항이 n일 때 → 합 = n(n+1)/2
- n번째 항이 n²일 때 → 합 = n(n+1)(2n+1)/6
- n번째 항이 n³일 때 → 합 = n²(n+1)²/4
따라서 전체 합은 다음과 같이 계산할 수 있습니다.
n²(n+1)²/4 + 3 × n(n+1)(2n+1)/6 + 2 × n(n+1)/2
= n²(n+1)²/4 + n(n+1)(2n+1)/2 + n(n+1)
= n(n+1){n(n+1)/4 + (2n+1)/2 + 1}
= n(n+1){(n² + n + 4n + 2 + 4)/4}
= 1/4 · n(n+1)(n² + 5n + 6)
= 1/4 · n(n+1)(n+2)(n+3)
결국 이 수열의 합은 닫힌 형태(closed form)의 간단한 공식으로 정리됩니다.
해결 방법 두 가지
이 문제는 크게 두 가지 방법으로 해결할 수 있습니다.
- 수학 공식 활용: 위에서 유도한 합 공식을 코드에 직접 대입합니다.
- 반복문 활용: 1부터 n까지 각 항을 순회하며 누적하여 더합니다.
방법 1: 수학 공식 활용
유도된 공식 sum = 1/4 · n(n+1)(n+2)(n+3)을 그대로 사용합니다.
알고리즘
입력: 항의 개수 n
Step 1 : 합을 계산한다.
sum = 1/4 × {n(n+1)(n+2)(n+3)}
Step 2 : 표준 출력 함수로 sum을 출력한다.C 코드 예제
#include <stdio.h>
#include<math.h>
int main() {
float n = 6;
float area = n*(n+1)*(n+2)*(n+3)/4;
printf("The sum is : %f",area);
return 0;
}실행 결과
The sum is : 756
공식 하나만으로 즉시 결과를 얻을 수 있으므로 시간 복잡도가 O(1)로 매우 효율적입니다.
방법 2: 반복문 활용
1부터 n까지 반복하면서 각 항 i(i+1)(i+2)를 계산하고 결과에 누적합니다.
C 코드 예제
#include <stdio.h>
#include<math.h>
int main() {
float n = 6;
int res = 0;
for (int i = 1; i <= n; i++)
res += (i) * (i + 1) * (i + 2);
printf("The sum is : %d",res);
return 0;
}실행 결과
The sum is : 756
반복문 방식은 직관적이고 이해하기 쉽지만, n이 커질수록 연산 횟수가 늘어나므로 시간 복잡도는 O(n)입니다.
마무리
두 방법 모두 동일한 결과를 출력하지만, n이 큰 경우에는 O(1)의 성능을 내는 수학 공식 방식이 훨씬 유리합니다. 반면 학습 목적으로 수열의 구조를 이해하고 싶다면 반복문 방식이 좋은 연습이 됩니다. 상황에 맞게 적절한 방법을 선택해 활용하시기 바랍니다.