※ 이전글
[파이썬으로 알고리즘배우기-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)
'Algorithm' 카테고리의 다른 글
[파이썬으로 알고리즘배우기-3] 중간값 구하기 (0) | 2021.02.08 |
---|---|
[파이썬으로 알고리즘배우기-2] 최소값 구하기 (0) | 2021.02.07 |
[파이썬으로 알고리즘배우기-1] 최대값 구하기 (0) | 2021.02.06 |
[파이썬으로 알고리즘배우기] 연재에 앞서.. (0) | 2021.02.05 |
댓글