이 문제에서는 하나의 정수 N이 주어지며, 우리의 목표는 수열 0, 2, 4, 8, 12, 18…의 N번째 항을 구하는 프로그램을 작성하는 것입니다.
문제 이해를 위한 예시
입력
N = 5
출력
12
해결 접근 방식
이 문제를 가장 간단하게 해결하는 방법은 수열의 N번째 항에 대한 일반화 공식을 활용하는 것입니다. 이를 위해서는 먼저 수열의 패턴을 관찰한 뒤, 이를 수식으로 일반화해야 합니다.
수열을 자세히 살펴보면 인접한 항 사이의 차이가 2, 2, 4, 4, 6, 6…처럼 두 번씩 반복되면서 증가하는 규칙성을 확인할 수 있습니다. 이러한 패턴을 분석하면 N번째 항은 아래와 같은 공식으로 표현됩니다.
T(N) = (N + N × (N - 1)) / 2
예를 들어 N = 5인 경우, T(5) = (5 + 5 × 4) / 2 = 25 / 2 = 12로 계산되며, 이는 실제 수열의 다섯 번째 항과 정확히 일치합니다. 이 공식을 사용하면 반복문 없이 단 한 번의 연산만으로 답을 구할 수 있으므로 시간 복잡도는 O(1)로 매우 효율적입니다.
솔루션 동작 예제 코드
#include <iostream>
using namespace std;
int calcNthTerm(int N) {
return (N + N * (N - 1)) / 2;
}
int main() {
int N = 10;
cout<<N<<"번째 항의 값은 "<<calcNthTerm(N);
return 0;
}출력
10번째 항의 값은 50
위 코드에서 calcNthTerm 함수는 앞서 도출한 공식을 그대로 구현한 것으로, 입력받은 N에 대해 해당 수열의 N번째 항을 즉시 반환합니다. main 함수에서는 N = 10을 대입하여 열 번째 항인 50이 올바르게 출력되는 것을 확인할 수 있습니다.