12강 최댓값찾기(Python Algorithm 12 Maximum value)
부제 : 알고리즘을 배우면서 파이썬 기초부터 RPG까지 정복
내용 : 초중고 또는 코딩 기초 입문자를 위한 누구나 따라 배울 수 있는 Python Algorithm 프로그램 기초 강의
1. 파이썬 기초 입문자
2. 알고리즘 기초에서 수학 기초
3. 기초 코딩
4. Text RPG Project
[동영상강의]
12. 최댓값 찾기(maximum value)
최댓값 찾기는 주어진 n개의 숫자 중에서 가장 큰 수를 찾아내는 알고리즘 입니다.
이것을 구현하기 위해서는 리스트(list) 를 배워야 합니다. 코딩에 익숙하게 하기 위해 리스트는 이제 영어로만 사용하도록 하겠습니다. 수학을 공부할 때도 익숙치 않은 이론을 만나면 낯설어 어려워 지듯이 프로그래밍 과정도 마찬가지입니다. list 이런식으로 해야 익숙해져 나중에 그렇구나 하고 생각하게 됩니다.
list
list 는 여러개의 요소들을 하나로 묶어 저장하고 관리할 수 있는 기능입니다.
대괄호([ ]) 안에 여러 요소들을 넣고 쉼표로 구분해서 작성을 하면 됩니다.
>>> fruit = ['apple', 'banana', 'dragonfruit', 'orange']
>>> years = [2017, 2018, 2019, 2020]
>>> students_in_circle = [28, 35, 40, 29]
>>>
fruit = ['apple', 'banana', 'dragonfruit', 'orange']
apple, banana, dragonfruit, orange 를 하나로 묶어 fruit 에 저장을 합니다.
>>> fruit = ['apple', 'banana', 'dragonfruit', 'orange']
>>> years = [2017, 2018, 2019, 2020]
>>> students_in_circle = [28, 35, 40, 29]
>>> fruit
['apple', 'banana', 'dragonfruit', 'orange']
>>> fruit[0]
'apple'
>>> years[0]
2017
>>>
fruit 라고 입력을 하면 ['apple', 'banana', 'dragonfruit', 'orange'] 가 표시되며 fruit 가 apple, banana, dragonfruit, orange 요소들을 묶어 놓은 list 라는 것을 보여줍니다.
fruit[0]은 list fruit의 첫 번째 요소값을 말합니다.
파이썬은 숫자를 0부터 세기 때문에 fruit[1]이 list fruit의 첫 번째 요소가 아니라 fruit[0]이 list fruit의 첫 번째 요소임을 명심합시다.
>>> years[1]
2018
>>> years[-1]
2020
>>>
years[-1]은 list years의 마지막 요소값을 말합니다.
최댓값 찾기를 구현하기 위해서는 list의 자료개수를 구할 수 있는 len() 함수를 알아야 합니다
>>> len(students_in_circle)
4
>>> len(years)
4
>>>
최댓값 찾기
- 최댓값 찾을 list 를 [28, 36, 16, 88, 2, 43] 으로 정합니다.
- 첫번째 숫자 28을 최댓값으로 기억합니다.
- 두번째 숫자 36을 현재 최댓값 28과 비교합니다.
- 36은 28 보다 크므로 현재 기억된 28 대신에 36을 최댓값으로 기억합니다.
- 세번째 숫자 16과 현재 최댓값 36과 비교합니다.
- 36이 16보다 크므로 그냥 지나갑니다.
- 다섯번째 숫자 2까지 이 과정을 반복합니다.
- 마지막 숫자 43을 현재 최댓값인 88과 비교합니다 .
- 88이 더 크므로 지나갑니다.
- 마지막으로 기억된 88이 최댓값이 됩니다.
maxvalue.py
# 숫자의 최댓값 구하기
# 입력 : 숫자 n개 들어있는 list
# 출력 : list에 들어있는 숫자 중 최댓값
def max_value(max_list):
n = len(max_list) # list 의 숫자 개수 저장
maxValue = max_list[0] # list의 첫 번째 값을 최대값으로 초기화
for i in range(1, n) : # 1부터 n-1까지 반복
if max_list[i] > maxValue: # 이번 값이 현재 기억된 최댓값보다 크면
maxValue = max_list[i] # 이번 값을 최댓값으로 기억
return maxValue # 기억된 최댓값을 반환
max_list = [28, 36, 16, 88, 2, 43]
print(max_value(max_list)) # 88 출력
훌륭하게 찾아냅니다. 그럼 이제 최댓값이 list 의 어느 위치에 있는지를 알아내는 것을 구현해 봅시다.
88이 몇번째 있는지 찾아내는거죠. 4번째 인데 실제 파이썬은 첫번째를 0으로 하니 3이 4번째가 되겠군요.
출력의 값은 3이 되면 되겠습니다.
maxindex.py
# 최댓값의 위치 구하기
# 입력 : 숫자 n개 들어있는 list
# 출력 : list에 들어있는 숫자 중 최댓값의 위치 값(0부터 n-1)
def max_value_index(max_list):
n = len(max_list) # list 의 숫자 개수 저장
maxValueIndex = 0 # list 중 0번 위치를 최댓값 위치로 설정
for i in range(1, n) : # 1부터 n-1까지 반복
if max_list[i] > max_list[maxValueIndex]: # 이번 값이 현재 기억된 최댓값보다 크면
maxValueIndex = i # 최댓값 위치를 변경 저장
return maxValueIndex # 기억된 최댓값을 반환
max_list = [28, 36, 16, 88, 2, 43]
print(max_value_index(max_list)) # 3 출력
내친김에 최솟값을 찾는 알고리즘을 구현해 봅시다.
minvalue.py
# 숫자의 최솟값 구하기
# 입력 : 숫자 n개 들어있는 list
# 출력 : list에 들어있는 숫자 중 최솟값
def min_value(min_list):
n = len(min_list)
minValue = min_list[0]
for i in range(1, n) :
if min_list[i] < minValue:
minValue = min_list[i]
return minValue
min_list = [28, 36, 16, 88, 2, 43]
print(min_value(min_list)) # 2 출력
그런데 python 에서는 max() 라는 함수를 제공하고 있습니다.
max() 를 이용하면 간단하게 최댓값을 찾을 수 있습니다.
그러나 우리는 알고리즘을 공부하는 것이므로 힘들게 구현을 한 것입니다.
max() 로 한 번 구현을 해 봅시다.
>>> max_list =[33, 56, 2, 55, 78]
>>> print(max(max_list))
78
>>>
어떻습니까? 정말 간단히 찾죠.
그럼 min() 도 있겠군요. 해봅시다.
>>> min_list =[33, 56, 2, 5,77]
>>> print(min(min_list))
2
>>>
되는군요. 역시 추론도 중요합니다.
일상적으로 우리가 아이디어가 떠오를때 누군가도 그런 아이디어를 생각하는 거죠.
자신만의 독특한 아이디어는 정말로 힘들다는 소리겠죠.
어쨋든 한발 더 나아가는 과정을 겪었습니다.
이제 입력받는 input 을 사용해서 입력 받은 값들에서 최댓값을 찾는 것을 max() 를 사용해서 구현 해 봅시다.
inputmaxvalue.py
first = input("Input first number : ")
second = input("Input second number : ")
third = input("Input third number : ")
print("Output maximum value")
print(max(first, second, third))
input("If you close your program, press enter key....")
========= RESTART: C:/Users/khd/Google 드라이브/SW/Python/inputmaxvalue.py =========
Input first number : 12
Input second number : 56
Input third number : 788
Output maximum value
788
If you close your program, press enter key....
이런 식으로 대화형으로 짜보니 흥미가 생깁니다.
이번 강의로 최댓값 최솟값을 구현하면서 list 의 사용법을 약간 알게 되었습니다.
구독 좋아요 해주세요. 큰 힘이 됩니다.
'Python > 닭치고 Algorithm' 카테고리의 다른 글
14강 계산기(Python Algorithm 14 calculator) (2) | 2020.04.04 |
---|---|
13강 동명이인 찾기(Python Algorithm 13 person with the same name) (0) | 2020.04.02 |
11강 재귀호출 sum(Python Algorithm 11 Recursive call sum) (0) | 2020.03.25 |
10강 if문(Python Algorithm 10 if else) (0) | 2020.03.23 |
9강 for문(Python Algorithm 9 for) (2) | 2020.03.22 |
댓글