for, while(반복문) 에 대해 모른다면 위 글을 먼저 읽어보고 오는 걸 추천한다.
최근 시작한 알고리즘 공부는 Python을 이용하기에 Python의 문법적 이해가
어느정도 동반되어야 한다.
먼저 while문을 이용한 n까지의 합 예제이다.
n까지의 합 (while)
print("1부터 n 까지의 정수의 합을 구하시오.")
n = int(input("n의 값을 입력하시오 >> ")) # n의 수를 입력받아 지정
sum=0 #합계를 담을 sum
i=1 #반복자는 1로 설정
while i<=n: #1부터 n까지
sum+=i #i 는 1씩 증가하며 sum에 합
i+=1
print(f'{sum}')
sum에는 값을 증가하는 i를 담을거고 (iterator)
i는 1씩 증가한다 증가하면서 sum에 합해지고
n은 1부터 더할 값을 제한 지정해준다.
while로 하면 반복의 기능을 충실히 사용할 수 있지만
사실 이런 n까지의 합이란 코드를 구현하려면
for 문이 조금 더 편할 것이다.
n까지의 합 (for)
n=int(input("n의 값을 입력하시오 >> "))
i=1
sum=0
for i in range(1,n+1): #range 함수는 1부터 n+1까지 범위를 지정해주는 함수 range()
sum+=i
print(f'1부터 n 까지의 합은 {sum}입니다.')
time은 함수의 실행시간을 측정하기 위해 넣어놓은 함수가 작동된것이므로 신경쓸 필요 없다
for문을 이용하면 일일히 i의 값을 증가시켜야 할 필요도 없고 range()를 거치면 되기에 편하다.
할 일이라고는 sum에 i를 더해주기만 하면 된다.
하지만 사실 반복문을 사용하게 되면 판단횟수가 1회 증가하는 거나 다름없다
그러면 시간은 더 소모되고 알고리즘을 사용하는 기업이나 개발자 입장에서
대량의 정보를 처리해야 할 때 막대한 손실로 이어질 수 있다.
n까지의 합 (가우스의 덧셈)
n=int(input("n의 값을 입력하시오 >> "))
sum=0
i=1
sum=n*(n+1)/2
print(sum)
사실 작은 값으로의 연산을 하면 알고리즘의 여부와 상관없이
거의 차이를 느끼지 못한다 그래서 각각 다른 반복문과 방식으로 짜인 코드에
나름 큰 값을 넣어 연산시간을 측정해봤다.
while문에는 1억 단위의 수를 넣어봤는데 몇 분을 기다려도 연산이 안되어서 포기했다.
그에 반해 가우스의 덧셈 식은 1억 이상 단위도 빠른 속도를 보여줬다.
위의 세 가지는 같은 값으로 비교하기 위해 캡처한 장면들이다
for문과 가우스의 덧셈 식의 연산 속도가 거의 차이가 없는 듯 하다
그래서 for문과 가우스의 덧셈 식 두개에는 100,000,000 즉 1억
의 연산값을 집어넣어 비교했다.
보잘것없는 사지방 컴퓨터와 웹 기반의 컴파일러 구름 ide는 1억의 연산을 감당하지 못하고
멈춰버렸다 코드가 비효율적인 탓도 있겠지만 아무튼 연산 시간이 5분을 넘어가는 걸 보니
계산 결과를 보는 것은 포기해야 한다.
아무튼 연산 속도는 while<for<Gauss 이 순이라고 봐야할 듯 하다.
정리는 notion에 되어있다.
'개발&코딩 > Python' 카테고리의 다른 글
반복문을 이용한 특수문자 출력 (0) | 2021.01.04 |
---|---|
a 부터 b 까지의 합 - Python Algorithm loop_basic (2) | 2021.01.03 |
중간값 구하기 알고리즘 (Python_Algorithm, median) (0) | 2020.12.27 |
무신사 홈페이지에서 키워드 수집해오기 (Python_Crawler) BeautifulSoup (0) | 2020.12.19 |
Python Algorithm 기초 공부1 (0) | 2020.12.13 |
댓글