본문 바로가기
프로젝트 오일러

Project Euler #6

by dan.de.lion 2017. 2. 8.

Project Euler #6


문제


The sum of the squares of the first ten natural numbers is,


The square of the sum of the first ten natural numbers is,


Hence the difference between the sum of the squares of the first ten natural numbers and the square of the sum is

Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.

처음 10개 자연수의 제곱의 합은 다음과 같다.

처음 10개 자연수의 합의 제곱은 다음과 같다.

처음 10개 자연수에 대한 합의 제곱과 제곱의 합의 차는 다음과 같다.

처음 100개 자연수에 대한 합의 제곱과 제곱의 합의 차를 구하라.

풀이 1


  • 일차원적으로 접근하면 다음과 같다.
  • sum함수를 이용했다.
import time
num = 100
stime = time.time()

sumS = sum(range(1, num + 1)) ** 2
Ssum = sum(x ** 2 for x in range(1, num + 1))

print(sumS - Ssum)
print("Running Time: %f" %(time.time() - stime))

풀이 2


  • 앞서 말한 것과 같이 풀이 1은 일차원적으로 접근한 풀이법이다.
  • 사실 100까지의 자연수기 때문에 크게 수행속도 면에서 차이는 없으나 좀 더 효율적인 방법을 제시해 보고자 한다.
  • 1부터 n까지의 합은 이다.
  • 부터 까지의 합의 공식 유도 과정 다음과 같다.(제곱의 합)

import time
num = 100
stime = time.time()

sumS = pow((num * (num + 1) / 2), 2)
Ssum = num * (2 * num + 1) * (num + 1) / 6

print(sumS - Ssum)
print("Running Time: %f" %(time.time() - stime))

후기

해당문제에서 풀이 1풀이 2의 수행속도 차이는 없다.

다만, 앞서 보았던 시간복잡도와 관련하여 개선의 여지가 있어 풀이 2의 형태를 추가하였다.

또한, Project Euler 자체가 수학적인 성찰을 포함하므로 풀이 2가 좀 더 의미에 부합한다고 볼 수 있다.

'프로젝트 오일러' 카테고리의 다른 글

Project Euler #8  (0) 2017.02.10
Project Euler #7  (0) 2017.02.09
Project Euler #5  (0) 2017.02.07
Project Euler #4  (0) 2017.02.06
Project Euler #3  (0) 2017.02.05

댓글