이 글에서는 주어진 문제를 해결하기 위한 풀이 방법과 접근 방식에 대해 자세히 알아보겠습니다.
문제 정의
문제: 정수 n이 입력으로 주어졌을 때, 다음 수열의 합을 구해야 합니다.
1/1! + 2/2! + 3/3! + 4/4! + …… + n/n!
접근 방식
이 문제는 for 반복문을 사용하여 해결할 수 있으며, 이 경우 시간 복잡도는 O(n)이 됩니다.
효율성을 높이기 위해 팩토리얼 계산을 같은 반복문 안에서 함께 처리합니다. 매 반복마다 팩토리얼을 처음부터 새로 계산하는 대신, 이전 단계에서 구한 팩토리얼 값에 현재 숫자 i를 곱하여 누적하는 방식입니다. 이렇게 하면 불필요한 중복 연산을 피할 수 있어 성능이 크게 향상됩니다.
아래와 같이 sumOfSeries 함수를 작성합니다.
예제 코드
def sumOfSeries(num):
res = 0
fact = 1
for i in range(1, num+1):
fact *= i
res = res + (i / fact)
return res
n = 100
print("Sum: ", sumOfSeries(n))
출력 결과
Sum: 2.7182818284590455
위 코드에서 모든 변수와 함수는 아래 그림과 같이 전역 범위(global scope)에 선언되어 있습니다.

결론
이 글에서는 파이썬의 반복문 하나만을 사용하여 수열 1/1! + 2/2! + 3/3! + … + n/n!의 합을 O(n) 시간 복잡도로 효율적으로 구하는 방법을 살펴보았습니다.
흥미로운 점은 n이 커질수록 이 수열의 합이 자연상수 e(약 2.71828)에 수렴한다는 사실입니다. 실제로 n = 100일 때의 출력 결과가 2.7182818284590455인 것을 통해 이를 확인할 수 있습니다.