이 문제에서는 하나의 숫자 N이 주어지며, 우리의 목표는 수열 2, 12, 28, 50, 77, 112, 152, 198, ...의 N번째 항을 구하는 C++ 프로그램을 작성하는 것입니다.
문제 설명
주어진 수열은 다음과 같습니다.
2, 12, 28, 50, 77, 112, 152, 198, ... (N개의 항)
먼저 이 수열의 일반항(일반 공식)을 찾아야 합니다.
예제를 통한 이해
입력: N = 6
출력: 112
해결 접근 방법
수열의 값을 자세히 살펴보면 인접한 항 사이의 차이가 규칙적으로 증가하는 포물선(parabolic) 형태를 띠고 있습니다. 이러한 수열의 일반항은 일반적으로 이차방정식 형태로 표현할 수 있습니다.
실제로 각 항에 공식을 대입해 확인해 보면 다음과 같습니다.
- N = 1 → 3×1² + 1 − 2 = 2
- N = 2 → 3×2² + 2 − 2 = 12
- N = 3 → 3×3² + 3 − 2 = 28
- N = 4 → 3×4² + 4 − 2 = 50
따라서 이 수열의 일반항 공식은 다음과 같습니다.
TN = 3 × (N × N) + N − 2
솔루션 동작을 보여주는 프로그램
#include <iostream>
using namespace std;
int findNTerm(int N) {
int nthTerm = ((3 * N * N) + N - 2);
return nthTerm;
}
int main() {
int N = 10;
cout << N << "th term of the series is " << findNTerm(N);
return 0;
}출력 결과:
10th term of the series is 308
위 코드는 findNTerm 함수에서 일반항 공식을 적용해 N번째 항을 계산한 뒤 반환합니다. main 함수에서는 N = 10을 입력으로 사용하며, 실행 결과 수열의 10번째 항인 308이 출력됩니다.
시간 복잡도 분석
이 솔루션은 단순히 공식에 값을 대입하기만 하므로 시간 복잡도는 O(1)입니다. 반복문 없이 상수 시간 안에 답을 구할 수 있어 매우 효율적입니다.