문제 개요
이 문제에서는 정수 값 N이 주어지며, 우리의 목표는 √3 + √12 + ... 급수의 n항까지의 합을 구하는 것입니다.
해당 급수는 다음과 같습니다.
√3 + √12 + √27 + √48 + ...
즉, 제곱근으로 이루어진 급수입니다.
예제로 문제 이해하기
입력 : N = 3
출력 : 10.3922
설명 −
√3 + √12 + √27 = 1.7320 + 3.4641 + 5.1961 = 10.3922
해결 접근 방식
이 문제를 해결하는 가장 간단한 방법은 급수의 일반항을 먼저 찾은 뒤, n항까지의 합을 구하는 것입니다. 공식을 활용해 합을 한 번에 계산하면 시간 복잡도를 O(1)로 줄일 수 있습니다.
급수를 다시 살펴보면 다음과 같습니다.
√3 + √12 + √27 + √48 + ...
모든 항에 √3가 공통으로 포함되어 있으므로, 이를 인수로 묶으면 다음과 같이 정리됩니다.
⇒ √3 × (√1 + √4 + √9 + √16 + ...)
⇒ √3 × (1 + 2 + 3 + 4 + ...)
따라서 급수의 일반항은 다음과 같습니다.
Tn = n × √3
이 일반항을 이용하면 n항까지의 합을 다음과 같이 유도할 수 있습니다.
합 = Σ (n × √3)
합 = √3 × Σ n
합 = √3 × (n × (n+1)) / 2
즉, 반복문 없이 자연수 합 공식만으로도 전체 합을 상수 시간에 계산할 수 있습니다.
구현 예제
아래 프로그램은 위 솔루션의 동작 방식을 보여줍니다.
#include<iostream>
#include<math.h>
using namespace std;
float calcSumNTerms(float n) {
return ((sqrt(3)) * ((n*(n+1))/2));
}
int main() {
float n = 25;
cout<<"급수의 n항까지의 합은 "<<calcSumNTerms(n);
return 0;
}
출력 결과
급수의 n항까지의 합은 562.917
복잡도 분석
위 풀이는 반복 연산 없이 단일 공식으로 결과를 도출하므로, 시간 복잡도는 O(1), 공간 복잡도 역시 O(1)입니다. N이 아무리 커져도 성능 저하 없이 즉시 답을 얻을 수 있다는 점이 이 접근 방식의 가장 큰 장점입니다.