DATA TOOL/ALGORITHM(알고리즘)

[알고리즘:파이썬] 02. 최대값/최소값 구하기

레디코 2020. 1. 25. 11:35

안녕하세요. 쏘피입니다. 오늘은 02. 최댓값 찾기 문제를 풀어보겠습니다.

 


문제: 최댓값을 구하시오

1, 9, 8, 100, 50



잠깐! 문제를 풀기 앞서 파이썬 기초

1) 리스트 할당

2) 자료 위치

3) 리스트 길이

 

# 1) 리스트 할당

a = [1, 9, 8, 100, 50]  
a

 

#2) 자료 위치
a[2] #파이썬은 0부터 센다. 그래서 2를 넣으면 3번째 값인 8이 나옴 
a[-1] #마지막값은 -1로 부를 수 있다.->50

 

#3) 리스트 길이
len(a) #list a의 자료 갯수->5


풀이:

1) 입력: 숫자가 n개 들어있는 리스트 

2) 출력: 숫자 n개 중 최댓값

3) 계산 알고리즘:

    [1] 첫 번째 숫자를 최대값으로 기억

    [2] 첫 번째 숫자와 두 번쨰 숫자를 비교하고 최댓값을 바꿔 기억

        .....

    [N] 마지막으로 기억된 숫자가 최댓값

 

4) 파이썬으로 구현:

# 최댓값 구하기
# 입력: 숫자가 n개 들어있는 리스트
# 출력: 숫자 n개 중 최댓값

def find_max(a):
    n = len(a)
    max_v = a[0]
    for i in range(1, n):
        if a[i] > max_v:
            max_v = a[i]
    return max_v

v = [1, 9, 8, 100, 50]
print(find_max(v))  
    
    

알고리즘 분석

 


 

두 값 중 어느 것이 더 큰지를 판단하는 비교가 이 알고리즘에서의 계산

n개 이므로 비교는 n-1 번 진행 해야 함.

그렇다면 빅오는? => O(n): 입력 크기와 계산 시간이 비례

 


추가 문제: 리스트에 숫자 n개가 있을때 가장 큰 값이 있는

위치 번호를 돌려주는 알고리즘을 만들어보시오

 


 

#입력: 숫자 N개 리스트

# 출력: 숫자 N개 중에서 최댓값이 있는 위치(0부터 n-1까지)

 

def find_max_plc(a):
    n = len(a)
    max_v = 0
    for i in range(1, n):
        if a[i] > a[max_v]:
            max_v = i
    return max_v

v = [1, 9, 8, 100, 50]
print(find_max_plc(v))  
    
    


추가 연습문제


2-1 숫자 n개를 리스트로 입력받아 최솟값을 구하는 프로그램을 만들어보세요.

 

 


추가 연습문제 풀이


# 2-1 숫자 n개를 리스트로 입력받아 최솟값을 구하는 프로그램을 만들어보세요.

def find_min(a):
    n = len(a)
    min_v = a[0]
    for i in range(1, n):
        if a[i] < min_v:
            min_v = a[i]
    return min_v

v = [1, 9, 8, 100, 50]
print(find_min(v))  
    
    

문제 출처: 모두의 알고리즘 with 파이썬

 

 


챕터 2라서 그런지 아직까진 쉽네요!

꾸준히 문제 18까지 가보겠습니다.

 

그리고 책에 나와있는 파이썬 기본 문법도

정리해서 포스팅 해보겠습니다!