본문 바로가기

DB엔지니어가 공부하는 python

파이썬 리스트 알고리즘 최댓값 찾기 #3

파이썬 리스트 알고리즘 최댓값 찾기 #3

 

안녕하세요.

 

파이썬 알고리즘 세번째 시간입니다.

 

우선, 제가 하는 이 파이썬 알고리즘 포스팅은, 클래스가 목적이 아님을 알려드립니다.

 

제가 파이썬을 누구한테 가르칠 수준이 되지도 않거니와, 그저 저도 같이 공부를 하는 입장이라는 점 인지하시길 바랍니다. (누가 파이썬 좀 잘하게 해주세요...ㅜㅜ)

 

그리고, 파이썬을 이용해서 알고리즘을 공부 해보자는 것 이지, 파이썬 자체에 대해서 수려한 스킬이 있는 포스팅이 아님을 더불어 알려드립니다.

 

제 포스팅 중에선 파이썬 관련된것이 많은데, 데이터 분석쪽이나, 시각화 그리고 DB와 관련된 포스팅을 주로 작성하고 있으니, 관심 있으신분들은 함께 하시길 바랍니다!

 

자, 각설하고 시작하겠습니다.

 

파이썬은 리스트라는것을 이용하여 여러개의 수를 하나의 변수로 저장하여 관리할수 있습니다.

이렇게 보면 a 라는 변수에 1,2,3이 들어가 있는것을 볼 수 있습니다.

 

자, 이건 무엇일까요? 코드의 3번을 보시면 위에 선언했던 a라는 리스트의 1번 주소에 있는 값, 2를 가지고 온겁니다.

 

1번인데 왜? 2가나오죠? 네, 0부터 시작하기 때문입니다.

 

그리고 코드의 4번은 a[-1] 이라고 되어 있는데, 네 예상하시는데로 끝에서 첫번째것을 말하는겁니다.

 

그러닌깐 3이 나왔겠죠?

 

마지막에 있는 len(a)는 리스트안에 들어 있는 자료의 개수를 리턴합니다. 당연히 3개가 있으니, 3이 출력 되었습니다.

 

자주 쓰이는 리스트의 기능을 한번 살펴 볼까요?

 

append - a 리스트에 4를 추가 합니다.

pop - a 리스트에서 ( ) 안의 번지값을 빼내오며, 해당 값을 리턴 합니다.

clear - a 리스트의 모든 값을 삭제 합니다.

in - a 리스트에 값이 있는지 없는지를 확인 후 False or True를 리턴 합니다.


 

일단, 우리가 이번 알고리즘에서 다루게 될 리스트에 대해서 조금 알아 보았습니다.

 

자, 그럼 최댓값 구하는 방법 본격적으로 살펴 볼까요?

 

예를 들어 서로다른 숫자가 리스트에 8개 있습니다.

 

여기서 어떻게 최댓값을 찾을까요?

 

1. 첫번째 숫자를 기억한다.

2. 두번째 숫자와 기억하고 있는 첫번째 숫자를 비교하여 더 큰 값을 기억한다.

.

.

.

.

8. 여덟번째 숫자와 기억하고 있던 큰 값을 비교하여 더 큰값을 최댓값이라 한다.

 

이 알고리즘을 파이썬 코드로 표현해 볼까요?

def max_f(a):
    n = len(a)    # 리스트 안의 숫자 갯수
    max_vl = a[0]  # 리스트의 첫 번째 값을 최댓값으로 저장
    for i in range(1, n):  # 1부터 n-1까지 반복
        if a[i] > max_vl:   # 이번 값이 현재까지 기억된 최댓값과 비교
            max_vl = a[i]   # 최댓값을 기억
    return max_vl

v = [10, 2, 18, 23, 59, 24, 33, 62]
print(max_f(v))

이렇게 표현 할 수 있겠습니다.

 

지난 시간에 접했던 계산 복잡도를 한번 생각해 볼까요?

 

이번 알고리즘은 어떤가요?

 

이번 알고리즘을 분석해 보면 만약 리스트에 100개의 숫자를 받아서 넣었다면, 이 알고리즘의 계산 복잡도는 O(n)이 되겠죠.

 

리스트에 들어가는 숫자의 갯수가 많아 질 수록 알고리즘 안에 있는 for loop의 수행 횟수는 늘어날 겁니다.

 

혹시라도 최댓값을 찾는 이 알고리즘에 대하여 다른 좋은 생각이 있으신들이 있으면 댓글 부탁드립니다.

 

감사합니다.

 

오늘은 여기까지!

 

 

 

by.sTricky