문제 이해하기
주어진 수열은 1, 17, 98, 354...입니다.
이 수열을 자세히 관찰해 보면, n번째 항이 각 자연수의 4제곱 값들을 차례대로 더한 누적 합과 같다는 규칙을 발견할 수 있습니다.
패턴을 직접 확인해 보겠습니다.
1 = 1 ^ 4
17 = 1 ^ 4 + 2 ^ 4
98 = 1 ^ 4 + 2 ^ 4 + 3 ^ 4
354 = 1 ^ 4 + 2 ^ 4 + 3 ^ 4 + 4 ^ 4
...
알고리즘
- 숫자 N을 초기화합니다.
- 결과값을 0으로 초기화합니다.
- 1부터 n까지 반복하는 루프를 작성합니다.
- 현재 숫자의 4제곱 값을 결과에 더합니다.
- 최종 결과를 출력합니다.
C++ 구현
다음은 위에서 설명한 알고리즘을 C++로 구현한 코드입니다.
#include <bits/stdc++.h>
using namespace std;
int getNthTerm(int n) {
int nthTerm = 0;
for (int i = 1; i <= n; i++) {
nthTerm += i * i * i * i;
}
return nthTerm;
}
int main() {
int n = 7;
cout << getNthTerm(n) << endl;
return 0;
}
실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
4676
동작 원리 상세 분석
n = 7일 때의 계산 과정을 단계별로 살펴보면 다음과 같습니다.
1⁴ = 1
2⁴ = 16
3⁴ = 81
4⁴ = 256
5⁴ = 625
6⁴ = 1296
7⁴ = 2401
합계: 1 + 16 + 81 + 256 + 625 + 1296 + 2401 = 4676
이처럼 각 반복마다 현재 인덱스의 4제곱 값을 누적하는 방식으로, 시간 복잡도는 O(n)으로 매우 효율적으로 동작합니다. 만약 n이 매우 큰 경우에는 오버플로우를 방지하기 위해 long long 타입 사용을 고려하는 것이 좋습니다.