1 에서 10까지 더하면 - 1 eseo 10kkaji deohamyeon

가장 기초적인 알고리즘인 범위내의 숫자를 합하는 알고리즘이다.

숫자를 합하는 알고리즘은 대표적으로 2가지 방법이 있는데, 첫 번째 방법은 반복문을 이용해 숫자를 더하는 방식이다. 이 방식은 쉽지만 시작과 끝 숫자의 차이가 크다면 그만큼 반복을 해야하기 때문에 성능에 영향을 줄 수 있다.

두 번째 방법은 천재 수학자인 가우스가 사용했다고 알려진 방법이다. 공식은 아래와 같다. 

$$\frac{n(n+1)}{2}$$

1부터 100까지 더하는 문제라면 \(\frac{100(100+1)}{2}\) 이다.  이와 같은 알고리즘을 이용하면 반복문을 사용하지 않고 한번의 계산으로 값을 구할 수 있다. 그림으로 보면 아래와 같다. 제일 앞의 숫자와 제일 마지막 숫자의 합을 더하면 항상 101이 나온다. 그럼 1 부터 시작해 마지막 50번째가 되면 50+51 / 2가 마지막 계산이 된다. 이러한 이유로 2로 나누어 주는 것이다.

1. 1부터 10까지 숫자를 합하는 첫 번째 알고리즘

In [5]:

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))

1부터 10까지 합계 55 1부터 100까지 합계 5050

2. 1부터 10까지 숫자를 합하는 두 번째 알고리즘

In [3]:

# 이 방법이 성능적으로 효과적이다. 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))

1부터 10까지 합계 55.0 1부터 100까지 합계 5050.0

Reference

//www.gilbut.co.kr/book/bookView.aspx?bookcode=BN001731&page=1&TF=T

//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/

알고리즘 이야기 with python

1부터 10까지의 합을 구하는 알고리즘!

솔렛 2021. 8. 13. 17:38

01. 1부터 n까지의 합을 구해보자

수학교과서나 다른 프로그래밍 언어에서 흔하게 나오는 문제가 아마도 1~10까지의 합을 구하는 문제였던걸로 생각이 납니다 ~ 이 내용에서 우리가 주목할 일은 문제와 입력값 그리고 출력값에 대해 먼저 종이에 적어보고 그내용을 알고리즘으로 구체화 해보는 겁니다.

문제:  1부터 n까지 연속하는 숫자의 합을 구하는 문제
입력 = 'n까지 해당하는 숫자' 이므로 입력 = n
출력  : n=10이면 55, n=100이면 5050 이 출력 값

02. 계산 과정을 말해보자.

1~10까지의 숫자를 순서대로 더하기 위해서는 다음과 같은 과정을 거쳐야 합니다.

1+2 를 계산하고 답이 3이 나오면 기억해 두었다가 
다시 기억한 3에  3을 더해서 6을 기억하고 
다시 기억한 6에 4를 더해서 10을 기억하고 
다시 기억한 10에 5를 더해서 15를 기억하고 
......
다시 기억한 45에 마지막 숫자인 10을 더하면 55가 되니까
답은 55

03. 알고리즘을 구체화 하자

  1. 더하기를 한 합의 값을 저장할 변수 s를 만들어 초기값 '0'을 입력한다.
  2. 변수 i를 만들어 1부터 n까지의 숫자를 1씩 계속 증가시켜서 반복한다.
  3. 반복된 기존의 합인 s에 증가된 i를 더하여 얻은 값을 다시 s에 저장한다.
  4. 반복이 완료되면 s에 저장된 값을 출력하도록 한다.

결과는 

50
5050
이 나옵니다.

다음시간에는 같은 1~n까지의 합을 구하는 방법중에서 가우스의 방법을 이용해서 다시 만들어보겠습니다.
같은 내용이라도 수학적 공식을 통해서 더 빠르고 효율적으로 알고리즘을 만들면 더 큰 숫자를 더 빠른 시간에 결과값을 낼 수 있습니다 .

혹시 궁금하면 수학자 가우스를 찾아서 한번 미리 해보실랍니까? ㅎㅎㅎ

//www.keduit.com

우수 직업전문학교 한국정보교육원

국비지원,교육비 전액무료,우수훈련기관 한국정보교육원

www.keduit.com

Toplist

최신 우편물

태그