이 글에서는 주어진 문제를 해결하기 위한 접근 방식과 해결 방법을 알아보겠습니다.
문제 정의
입력값 n이 주어졌을 때, 다음과 같은 급수의 합을 n번째 항까지 출력해야 합니다.
1³ + 2³ + 3³ + 4³ + … + n³
이 문제는 크게 두 가지 방법으로 해결할 수 있습니다.
- 반복문을 이용한 브루트 포스(Brute-force) 방식
- n개 자연수의 세제곱합에 대한 수학 공식 활용
방법 1: 반복문으로 각 항을 더하여 계산
1부터 n까지 숫자를 하나씩 순회하면서 각 항의 세제곱 값을 누적하는 방식입니다. 직관적이고 이해하기 쉽지만, 시간 복잡도가 O(n)이라는 점을 기억해야 합니다.
예제 코드
def sumOfSeries(n):
sum = 0
for i in range(1, n+1):
sum += i*i*i
return sum
# 실행 함수
n = 3
print(sumOfSeries(n))출력 결과
36
n = 3일 때, 1³ + 2³ + 3³ = 1 + 8 + 27 = 36이므로 올바른 결과가 출력됩니다.
방법 2: 수학 공식을 이용한 계산
자연수의 세제곱합에는 이미 유도된 잘 알려진 공식이 있습니다. 이 공식을 사용하면 반복 없이 한 번의 연산으로 결과를 얻을 수 있어 시간 복잡도가 O(1)로 매우 효율적입니다.
Sum = (n * (n + 1) / 2) ** 2
즉, 처음 n개 자연수의 합(n(n+1)/2)을 제곱하면 세제곱합과 같다는 흥미로운 성질을 이용합니다.
예제 코드
def sumOfSeries(n):
x = (n * (n + 1) / 2)
return int(x * x)
# 메인
n = 3
print(sumOfSeries(n))출력 결과
36
마무리
이 글에서는 처음 n개 자연수의 세제곱합을 계산하는 두 가지 방법을 살펴보았습니다. 작은 입력값에는 반복문 방식도 충분하지만, 입력 크기가 커질수록 수학 공식을 활용한 O(1) 방식이 훨씬 효율적입니다. 문제 상황에 맞게 적절한 방법을 선택하는 것이 중요합니다.