가장 기초적인 알고리즘인 범위내의 숫자를 합하는 알고리즘이다.
숫자를 합하는 알고리즘은 대표적으로 2가지 방법이 있는데, 첫 번째 방법은 반복문을 이용해 숫자를 더하는 방식이다. 이 방식은 쉽지만 시작과 끝 숫자의 차이가 크다면 그만큼 반복을 해야하기 때문에 성능에 영향을 줄 수 있다.
두 번째 방법은 천재 수학자인 가우스가 사용했다고 알려진 방법이다. 공식은 아래와 같다.
$$\frac{n(n+1)}{2}$$
1부터 100까지 더하는 문제라면 \(\frac{100(100+1)}{2}\) 이다. 이와 같은 알고리즘을 이용하면 반복문을 사용하지 않고 한번의 계산으로 값을 구할 수 있다. 그림으로 보면 아래와 같다. 제일 앞의 숫자와 제일 마지막 숫자의 합을 더하면 항상 101이 나온다. 그럼 1 부터 시작해 마지막 50번째가 되면 50+51 / 2가 마지막 계산이 된다. 이러한 이유로 2로 나누어 주는 것이다.
1. 1부터 10까지 숫자를 합하는 첫 번째 알고리즘
def sum_num(num):
total_num = 0
for i in range(1, num+1):
total_num += i
return total_num
print("1부터 10까지 합계")
print(sum_num(10))
print("\n")
print("1부터 100까지 합계")
print(sum_num(100))
2. 1부터 10까지 숫자를 합하는 두 번째 알고리즘
# 이 방법이 성능적으로 효과적이다.
def sum_num2(num):
return num * (num + 1) / 2
print("1부터 10까지 합계")
print(sum_num2(10))
print("\n")
print("1부터 100까지 합계")
print(sum_num2(100))
Reference
https://www.gilbut.co.kr/book/bookView.aspx?bookcode=BN001731&page=1&TF=T
https://tzanga.wordpress.com/2012/11/06/%EC%B4%88%EB%93%B1%ED%95%99%EA%B5%90-3%ED%95%99%EB%85%84/
'알고리즘(Algorithm)' 카테고리의 다른 글
절대값 알고리즘 (0) | 2017.08.20 |
---|