ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1. 1부터 n까지의 합 구하기
    Python/알고리즘 연습 2024. 7. 9. 11:33
    * 책: 모두의 알고리즘 with 파이썬 

     

    1. 1부터 n까지의 합을 구하는 방법

    • 머릿속에 무의식 중으로 떠오르는 방법은 아래 코드의 방법 1
    • 가우스처럼 똑똑하게 천재처럼 구하려면 방법 2 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    # 1부터 n까지의 합 구하기 방법1
    # 냅다 1부터 더하는 방법
     
    def sum_n(n):
        s = 0 # 초기화
        for i in range(1, n+1):
            s = s + i
        
        return s
        
    print(sum_n(10)) # 55
     
     
     
    # 1부터 n까지의 합 구하기 방법2
    # 가우스처럼 똑똑하게 구하기 (난 안됨 ㅠ)
     
    def gaus(n):
        return n*(n+1)//2
     
    gaus(10# 55
     
    # n*(n+1)에서 '*' 이거 안해주면 TypeError: 'int' object is not callable 오류남
    # // 나누기: int return, / 나누기: float return
    cs

     

    2. 입력 크기와 계산 횟수 

    • 방법 1: 반복문을 사용하는 것이므로 덧셈이 n번 반복되어 사용되는 셈 (총 n번)
    • 방법2: n이 아무리 크더라도 덧셈 한번, 곱셈 한번, 나눗셈 한번이면 끝남 (총 3번)

    보통 컴퓨터에서 사용하는 연산은 매우매우매우매우 큰 수를 다루므로 방법2처럼 간단하게 짜는 것이 중요

     

    3. 대문자 O 표기법: 계산 복잡도(complexity) 표현 '빅 오'

    • 방법 1: 사칙 연산을 총 n번 하므로 O(n)으로 표현
    • 방법 2: 마치 O(3)일 것 같으나 O(1);
    • 입력 크기가 커져도 계산 시간이 더 늘어나지 않는 경우에는 모두 O(1)로 표현 
    ##################결론#####################
    O(n): 필요 계산 횟수가 입력 크기 n과 비례할 때 표기
    O(1): 필요 계산횟수가 입력 크기 n과 무관할 때 표기

     

     

    <연습 문제>

    1부터 n까지 연속한 숫자의 제곱의 합 구하기 

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 1부터 n까지의 제곱의 합 구하기 방법 1
    # 덧셈과 비슷, O(n)의 방법
     
    def sqr_sum(n):
        s = 0
        for i in range(1, n+1):
            s = s + i**2
        
        return s
        
     
    # 방법2: {n(n+1)(2n+1)}/6 사용
     
    def gaus2(n):
        return n*(n+1)*(2*n+1)//6
    cs

     

    'Python > 알고리즘 연습' 카테고리의 다른 글

    4. 팩토리얼 구하기 - 재귀 호출의 등장  (2) 2024.07.12
    3. 동명이인 찾기 ①  (0) 2024.07.11
    2. 최댓값 찾기  (0) 2024.07.09

    댓글

Designed by Tistory.