사이트 이름 - 문제 6번
1부터 10까지 자연수를 각각 제곱해 더하면 다음과 같습니다 (제곱의 합).
12 + 22 + ... + 102 = 385
1부터 10을 먼저 더한 다음에 그 결과를 제곱하면 다음과 같습니다 (합의 제곱).
(1 + 2 + ... + 10)2 = 552 = 3025
따라서 1부터 10까지 자연수에 대해 "합의 제곱"과 "제곱의 합" 의 차이는 3025 - 385 = 2640 이 됩니다.
그러면 1부터 100까지 자연수에 대해 "합의 제곱"과 "제곱의 합"의 차이는 얼마입니까?
해결방법
간만에 정말 쉬운게 나왔다.
이건 파이썬에서 ** 가 제곱이라는 것만 알면 간단히 해결되는 문제다.
- sum : 리스트안에 있는 요소들의 합을 반환
- abs : 절대값
def squared_sum(number):
'''제곱의 합'''
return sum([i ** 2 for i in range(1, number + 1)])
def sum_squared(number):
'''합의 제곱'''
return sum([i for i in range(1, number + 1)]) ** 2
def calc(number):
'''[합의 제곱]과 [제곱의 합]의 차'''
return abs(sum_squared(number) - squared_sum(number))
# 실행
print(calc(10)) # 2640
print(calc(100)) # 25164150
위 식을 줄이면
def solution(number):
return abs(sum([i ** 2 for i in range(1, number + 1)]) - sum([i for i in range(1, number + 1)])** 2)
print(solution(100))
# 한 줄 짜리
print(abs(sum([i ** 2 for i in range(1, 101)]) - sum([i for i in range(1, 101)]) ** 2))
다른이의 해결 방법
a, b =0 , 0
for i in range(1,101):
a += i**2
b += i
print(b**2-a)
'프로그래밍 > 알고리즘' 카테고리의 다른 글
1000자리 수 안에서 이어지는 5개 숫자의 곱 중 최댓값은? (0) | 2021.01.28 |
---|---|
10001번째의 소수 (0) | 2021.01.27 |
소수 구하기 (0) | 2021.01.25 |
1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수 (0) | 2021.01.25 |
세자리 수를 곱해 만들 수 있는 가장 큰 대칭수 (0) | 2021.01.24 |