본문 바로가기
Algorithm

[파이썬으로 알고리즘배우기-4] 1~N 숫자더하기

by 노마드공학자 2021. 2. 9.

※ 이전글

[파이썬으로 알고리즘배우기-1] 최대값 구하기 https://limitsinx.tistory.com/82

[파이썬으로 알고리즘배우기-2] 최소값 구하기 https://limitsinx.tistory.com/84

[파이썬으로 알고리즘배우기-3] 중간값 구하기 https://limitsinx.tistory.com/85

 

※이 전글에서 정리한 코드/개념은 재설명하지 않으므로, 참고부탁드립니다

※해당 글은 PC에서 보기에 최적화 되어있습니다.


 

"1~N 까지의 숫자의 합들을 더해보는 문제"

 

 


① numpy library를 활용한 해결법

: command에 pip install numpy라는 명령어를 타이핑해주시면 numpy library가 자동설치됩니다!

 

 

 

 

[알고리즘 설명]

python에서 많이 사용되는 numpy라는 수학 라이브러리를 사용하여 푸는 코드입니다.

일단, 1 ~10까지의 합을 구해보고자

array라는 배열에 [1,2,3,4,5,6,7,8,9,10]을 담고, 이것들의 sum을 하는 코드입니다.

 

아무래도, 라이브러리 내용을 그대로 가져다쓰다보니 알고리즘적인 이해는 덜한 코드같습니다.

 

 

[코드]

import numpy as np

 

a = 10

array = np.zeros((1,a))

 

for i in range(1,a+1) :

    array[0,i-1] = i

 

sum = np.sum(array)

print(sum)

 

 

 

② numpy library를 활용한 해결법

 

 

[알고리즘 설명]

array를 사용하지 않고 바로바로 1+2+3+...+10까지 하는 코드입니다.

한가지 유의해주셔야할 부분은, range(1,a+1)인데요

 

for문의 range(a,b)는 a<= i < b입니다. 즉, b가 포함되지 않습니다.

따라서, 10을 그대로 넣으면 1+2+3+...+9에서 끝나버리게 되죠

따라서 +1을 해준 코드입니다.

 

 

[코드]

a = 10

sum = 0

for i in range(1,a+1) :

    sum = sum+i

 

print(sum)

 

 

 

 

③ 처음과 끝을 더해주는 방법

: 굳이 이렇게는 안해도되는데, 알고리즘이란 그냥 생각을 확장해나가는 방법이다보니... 해본방법입니다.

 

 

 

[알고리즘 설명]

[1,2,3,4,5,6,7,8,9,10]에서

처음과 끝인 1과 10을 더해주고, 2와9를 더해주고... 이런식으로 반복하여

결국 11*5=55로 최종값을 얻어내는 코드입니다.

 

이 코드는 a가 짝수일때만 돌아간다는 문제점이 있으므로, 올바른 알고리즘으로 보기는 어렵지만, 한번 구현해봤습니다.

 

[코드]

import numpy as np

 

a = 10

sum = 0

sum_return = 0

array = np.zeros((1,a))

 

for i in range(1,a+1) :

    array[0,i-1] = i

 

for i in range(1,int(a/2+1)) :

    sum = array[0,i-1] + array[0,a-i]

    sum_return = sum_return + sum

 

print(sum_return)

 

 

 

 

④ ③의 코드를 홀수개에서도 구현하는 방법

: 그냥 생각해보다가.. 1~11이면 총 11개인지라, 위의 방법으로는 중간에 남는 6을 더해줄수있는 방법이 없습니다.

따라서, 홀수 짝수 모두 전체합을 구할 수 있는 코드를 구현해보았는데요

 

 

 

 

 

이번글의 도전과제입니다.

해당 코드가 어떤 원리로 돌아가는지 이해하는 것입니다.

왜 이 코드는 a가 홀수일때와 짝수일때의 합을 모두 구할 수 있으며, 3번은 안되는지 이해하시는 것입니다.

손으로 써보면서 해보셔도 좋습니다! :)

 

궁금하신점은 언제든 쪽지/댓글 달아주세요!

 

[코드]

import numpy as np

 

a = 11

sum = 0

sum_return = 0

appendix = 0

array = np.zeros((1,a))



for i in range(1,a+1) :

    array[0,i-1] = i

 

for i in range(1,int(a/2+1)) :

    sum = array[0,i-1] + array[0,a-i]

 

if(int(a/2+1) == sum/2) : appendix = int(a/2+1)

else : appendix = 0

 

sum_return = sum * int(a/2) + appendix

 

print(sum_return)



 

 

 

 

댓글