이 문제에서는 정수 N이 주어지며, 수열 1, 3, 6, 10, 15, 21, 28...에서 n번째 항을 찾아야 합니다.
예제로 문제 이해하기
입력
N = 7
출력
28
설명
수열은 1, 3, 6, 10, 15, 21, 28... 로 진행됩니다. 7번째 항은 28입니다.
해결 접근 방법
가장 간단한 방법은 수열의 일반항을 찾는 것입니다. 수열을 관찰해 보면 i번째 수는 (i-1)번째 항에 i를 더한 값이라는 규칙을 발견할 수 있습니다.
- 1번째 항: 1
- 2번째 항: 1 + 2 = 3
- 3번째 항: 3 + 3 = 6
- 4번째 항: 6 + 4 = 10
이처럼 1부터 n까지의 자연수를 모두 더한 값으로 정의되는 수를 삼각수(Triangular Number)라고 부릅니다.
이 문제는 반복문을 사용하여 효율적으로 해결할 수 있습니다. 1부터 n까지 반복하면서 매번 현재 인덱스 값을 누적 합계에 더하고, 최종적으로 N번째 항의 값을 반환하면 됩니다. 시간 복잡도는 O(N)입니다.
참고로 삼각수는 수학 공식 T(n) = n × (n + 1) / 2를 이용하면 반복문 없이 O(1)에도 계산할 수 있습니다.
솔루션 동작 예시 코드
#include <iostream>
using namespace std;
int findNthTerm(int N) {
int NthTerm = 0;
for (int i = 1; i <= N; i++)
NthTerm = NthTerm + i;
return NthTerm;
}
int main() {
int N = 8;
cout << "The " << N << "th term of the series is " << findNthTerm(N);
return 0;
}
실행 결과
The 8th term of the series is 36
정리
위 프로그램은 반복문을 통해 1부터 N까지의 합을 구하는 방식으로 동작합니다. 예를 들어 N = 8일 경우 1 + 2 + 3 + ... + 8 = 36이므로 8번째 항은 36이 됩니다. 만약 입력 크기가 매우 크다면 공식 n * (n + 1) / 2를 활용하는 것이 더 효율적인 선택입니다.