수들의 합
수들의 합
아주 간단한 문제인데, 얼마전 피보나치 수열을 비효율적으로 짰던 비슷한 경험이 떠올라서 간단히 정리하기로 했다.
문제
서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?
입력 첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
출력 첫째 줄에 자연수 N의 최댓값을 출력한다.
비효율적인 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def function(n):
total = 0
for i in range(1,n+1):
total += i
return total
n = 1
S = int(input())
while function(n) < S:
n += 1
print(n-1)
팩토리얼을 계산하는 함수를 만들어서 그 함수가 S보다 커질 때까지 반복했는데, for문이 쓸데없이 많이 반복된다. S가 4,294,967,295와 같이 매우 커지면 시간이 오래 걸린다.
다시 짠 코드
1
2
3
4
5
6
7
8
9
10
11
n = 1
S = int(input())
total = 0
while total < S:
total += n
if total > S:
break
n += 1
print(n-1)
굳이 팩토리얼을 계산하는 함수를 만들지 않고, n을 계속 증가시키며, S보다 커질 때까지 total에 계속 더해준다.
This post is licensed under CC BY 4.0 by the author.