이 문제에서는 정수 N이 주어지며, 우리의 목표는 다음 수열의 n번째 항을 구하는 것입니다.
0, 8, 64, 216, 512, 1000, 1728, 2744…
문제 이해를 위한 예시
입력: N = 6
출력: 1000
접근 방법
수열의 n번째 항을 찾으려면 먼저 수열의 패턴을 면밀히 관찰해야 합니다. 이 수열은 짝수의 세제곱으로 이루어져 있으며, 첫 번째 항은 0에서 시작합니다.
따라서 수열은 다음과 같이 해석할 수 있습니다.
[0]3, [2]3, [4]3, [6]3, [8]3, [10]3…
i번째 항을 일반화하면 다음과 같습니다.
T1 = [0]3 = [2×(1−1)]3
T2 = [2]3 = [2×(2−1)]3
T3 = [4]3 = [2×(3−1)]3
T4 = [6]3 = [2×(4−1)]3
T5 = [8]3 = [2×(5−1)]3
위의 규칙을 종합하면, 수열의 n번째 항은 { [2×(N−1)]3 }이라는 공식으로 표현할 수 있습니다. 이 공식을 사용하면 반복문 없이 O(1)의 시간 복잡도로 답을 바로 계산할 수 있습니다.
구현 예제
다음은 위 접근 방식을 C++로 구현한 프로그램입니다.
#include <iostream>
using namespace std;
long findNthTermSeries(int n){
return ((2*(n-1))*(2*(n-1))*(2*(n-1)));
}
int main(){
int n = 12;
cout<<n<<"번째 항은 "<<findNthTermSeries(n);
return 0;
}
실행 결과
12번째 항은 10648
위 코드에서 n = 12를 입력하면, 공식 [2×(12−1)]3 = [22]3 = 10648이 계산되어 정확한 결과가 출력됩니다.