이 문제에서는 하나의 정수 N이 주어지며, 우리의 과제는 시리즈 1, 5, 32, 288, ...의 N번째 항을 구하는 프로그램을 작성하는 것입니다.
문제 이해를 위한 예시
입력
N = 4
출력
288
설명
4번째 항 = (44) + (33) + (22) + (11) = 256 + 27 + 4 + 1 = 288
수열의 규칙 분석
이 수열의 각 항은 1부터 해당 순서까지의 거듭제곱 값(nn)을 모두 더한 누적합으로 구성됩니다. 규칙을 단계별로 살펴보면 다음과 같습니다.
- 1번째 항: 11 = 1
- 2번째 항: 22 + 11 = 4 + 1 = 5
- 3번째 항: 33 + 22 + 11 = 27 + 4 + 1 = 32
- 4번째 항: 44 + 33 + 22 + 11 = 256 + 27 + 4 + 1 = 288
해결 접근 방법
이 문제를 푸는 가장 간단한 방법은 수열의 일반항 공식을 활용하는 것입니다. N번째 항에 대한 공식은 다음과 같습니다.
N번째 항 = (NN) + ((N-1)(N-1)) + ... + (22) + (11)
즉, 1부터 N까지 반복하면서 각 숫자 i에 대해 ii를 계산하고 모두 더하면 됩니다. 시간 복잡도는 O(N²)이며, N의 크기가 크지 않다면 충분히 효율적인 방법입니다.
구현 예제 코드
#include <iostream>
using namespace std;
// 시리즈의 N번째 항을 계산하는 함수
int calcNthTerm(int N) {
int sum = 0;
for (int i = 1; i <= N; i++) {
int power = 1;
// i의 i제곱 계산
for (int j = 0; j < i; j++)
power *= i;
sum += power;
}
return sum;
}
int main() {
int N = 4;
cout << N << "번째 항의 값은 " << calcNthTerm(N) << " 입니다";
return 0;
}
실행 결과
4번째 항의 값은 288 입니다
마무리
이처럼 수열의 패턴을 정확히 파악하면 복잡해 보이는 문제도 간단한 반복문 하나로 해결할 수 있습니다. N값이 커질 경우 결과값이 int 범위를 초과할 수 있으므로, 필요에 따라 long long 자료형을 사용하는 것이 좋습니다.