이 문제에서는 숫자 N이 주어지며, C++를 사용해 수열 3, 6, 18, 24, 45, 54, 84, ...의 N번째 항을 구하는 프로그램을 작성하는 것이 목표입니다.
문제 설명
주어진 수열은 다음과 같습니다.
3, 6, 18, 24, 45, 54, 84, ... (N개의 항)
우리는 이 수열의 일반항 공식을 찾아야 합니다.
입력 및 출력 예시
입력: N = 10
출력: 150
해결 접근 방법
수열의 일반항을 찾으려면 먼저 수열 전체를 관찰하고 적용 가능한 규칙성을 하나씩 확인해야 합니다. 모든 항이 3으로 나누어 떨어진다는 점이 눈에 띄지만, 이 특징만으로는 뒤의 항들까지 설명하는 데 한계가 있습니다.
그래서 항 번호 n(1, 2, 3, ...) 자체를 변수로 활용해 관계식을 다시 세워 보면, 홀수 항과 짝수 항의 증가 폭 차이까지 반영한 다음과 같은 일반항 공식을 얻을 수 있습니다.
수열의 일반항
Tn = n × ((n / 2) + ((n % 2) × 2) + n)
여기서 n / 2는 정수 나눗셈, n % 2는 나머지 연산입니다. n이 홀수일 때와 짝수일 때 증가 패턴이 서로 다른데, 이 공식은 조건문 없이 나머지 연산만으로 두 경우를 한 번에 처리할 수 있다는 장점이 있습니다.
공식 검증
| n | 계산 과정 | 결과 |
|---|---|---|
| 1 | 1 × (0 + 2 + 1) | 3 |
| 2 | 2 × (1 + 0 + 2) | 6 |
| 3 | 3 × (1 + 2 + 3) | 18 |
| 4 | 4 × (2 + 0 + 4) | 24 |
| 5 | 5 × (2 + 2 + 5) | 45 |
| 7 | 7 × (3 + 2 + 7) | 84 |
C++ 구현 코드
#include <iostream>
using namespace std;
int findNTerm(int N) {
int nthTerm = (N * ((N / 2) + ((N % 2) * 2) + N));
return nthTerm;
}
int main() {
int N = 7;
cout << N << "th term of the series is " << findNTerm(N);
return 0;
}
실행 결과
7th term of the series is 84
마무리
이 프로그램은 반복문 없이 O(1) 시간 복잡도로 N번째 항을 바로 계산합니다. 수열 문제를 풀 때는 공통 인수나 단순한 등차·등비 관계에 매몰되지 말고, 항 번호 n과의 함수 관계를 찾아보는 접근이 효과적이라는 점을 기억하면 좋습니다.