이 문제에서는 수열의 n번째 항을 나타내는 숫자 n이 주어지며, 우리의 목표는 C++로 수열 7, 21, 49, 91, 147, 217, ……의 N번째 항을 구하는 프로그램을 작성하는 것입니다.
문제 설명 — 수열 7, 21, 49, 91, 147, 217, …의 n번째 항을 찾아야 하며, 이를 위해 먼저 수열의 일반항을 유도합니다.
예제를 통해 문제를 이해해 보겠습니다.
입력 — N = 5
출력 — 147
해결 접근 방법
주어진 수열의 일반항을 유도해 보겠습니다. 수열은 다음과 같습니다.
7, 21, 49, 91, 147, 217, …
모든 항에 공통으로 포함된 숫자는 7입니다. 따라서 7로 묶어 표현할 수 있습니다.
7 * (1, 3, 7, 13, 21, 31, ...)
괄호 안의 수열을 자세히 살펴보면 인접한 항 사이의 차이가 2, 4, 6, 8, 10처럼 짝수로 증가하므로, 제곱수와 유사한 패턴으로 증가한다는 것을 알 수 있습니다.
수열: 7 * (1², (2² - 1), (3² - 2), (4² - 3), (5² - 4), (6² - 5), ....)
이를 바탕으로 수열의 일반항은 다음과 같이 일반화할 수 있습니다.
Tn = 7 * (n² - (n-1))
일반항 공식을 사용하면 수열의 임의의 값을 손쉽게 구할 수 있습니다.
예를 들면,
T₄ = 7*((4^2) - (4-1)) = 7(16 - 3) = 91 T₇ = 7*((7^2) - (7-1)) = 7(49 - 6) = 301
예제 코드
#include <iostream>
using namespace std;
int findNTerm(int N) {
int nthTerm = ( 7*((N*N) - (N - 1)) );
return nthTerm;
}
int main() {
int N = 9;
cout<<N<<"th term of the series is "<<findNTerm(N);
return 0;
}
출력:
9th term of the series is 511
코드 설명
findNTerm() 함수는 위에서 유도한 일반항 공식 Tn = 7 × (N² − (N − 1))을 그대로 구현하여 N번째 항을 계산한 뒤 반환합니다. main() 함수에서는 N = 9를 대입해 결과를 출력하며, 실행 결과로 511이 출력됩니다.
이 방식은 반복문 없이 단순히 공식만 계산하므로 시간 복잡도가 O(1)로 매우 효율적이며, 어떤 큰 N 값이 주어져도 즉시 답을 구할 수 있다는 장점이 있습니다.