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

C 언어로 수열 1·2·3 + 2·3·4 + … + n(n+1)(n+2)의 합 구하기

이 글에서는 수열 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)의 성능을 내는 수학 공식 방식이 훨씬 유리합니다. 반면 학습 목적으로 수열의 구조를 이해하고 싶다면 반복문 방식이 좋은 연습이 됩니다. 상황에 맞게 적절한 방법을 선택해 활용하시기 바랍니다.