-
2. 최댓값 찾기Python/알고리즘 연습 2024. 7. 9. 12:11
* 책: 모두의 알고리즘 with 파이썬
주어진 숫자 n개 중 가장 큰 숫자를 찾는 알고리즘을 만들어 보세요.1. 관련 개념: python 리스트 다루기
123456789101112131415161718192021222324252627# 리스트 개념 확인a = [1,2,3,4,5,6,7,8,9,10]a[0] # 1a[9] # 10; n개 요소를 가진 리스트의 마지막 요소는 n-1 인덱스로 구할 수 있음a[-1] # 10a[-2] # 9a[-10] # 마이너스 인덱스 사용 시 n개 요소를 가진 리스트의 첫번째 요소는 -n 인덱스# 리스트에서 많이 쓰이는 함수들# len(a), a.append(x), a.clear()는 생략# a.insert(i, x) # a 라는 리스트의 i번째에 x 요소를 끼워넣음#a.insert(10, 11) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]# a.pop(i) # a 라는 리스트의 i번째 요소를 빼버리고 함수의 결괏값으로 돌려줌, 아무것도 없으면 마지막 요소를 빼버림a.pop() # 11 # a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]a.pop(8) # 9 # a = [1, 2, 3, 4, 5, 6, 7, 8, 10]# x in a 리스트 a안에 x라는 값이 있는지 없는지 확인9 in a # False#a.insert(8,9) # [1, 2, 3, 4, 5, 6, 7, 8, 10, 9]9 in a # Truecs 2. 최댓값을구하는 알고리즘: O(n)
- 숫자들을 리스트에 잘 싼다.
- 리스트 첫번째 요소부터 순차적으로 비교한다.
- 가장 큰 값이 나왔을 때 멈춘다.
123456789101112v = [17, 92, 18, 33, 58, 7, 33, 42]def find_max(a):n = len(a) # n값 초기화max_nm = a[0] # max값 초기화for i in range(1, n):if max_nm < a[i]:max_nm = a[i] # max_nm 값을 if 조건에 따라 새로운 값으로 갱신return max_nmfind_max(v) # 92cs 3. 최댓값의 인덱스를 구하는 알고리즘 : O(n)
- 숫자들을 리스트에 잘 싼다.
- 리스트 첫번째 요소부터 순차적으로 비교하되 인덱스만 본다.
- 가장 큰 값이 나왔을 때 멈추고 인덱스를 구한다.
123456789101112131415161718192021222324252627v = [17, 92, 18, 33, 58, 7, 33, 42]# 복잡하고 사서 고생하는 코드def find_max_idx(a):n = len(a) # n값 초기화max_nm = a[0] # max값 초기화, 초기화 했기 때문에 range가 1부터 시작for i in range(1, n):if max_nm < a[i]:max_nm = a[i]idx = i # 인덱스는 곧 i이니라return idxfind_max_idx(v) # 92의 인덱스인 1# 더 간단한 방법이 있지롱def find_max_idx(a):n = len(a)idx = 0 # 인덱스 초기화, 초기화 했기 떄문에 range가 1부터 시작for i in range(1, n):if a[i] > a[idx]:idx = i # 조건에 맞는 인덱스로 교체return idxfind_max_idx(v) # 92의 인덱스인 1cs <연습문제>
리스트에 숫자 n개가 있을 때 가장 작은값을 돌려주는 알고리즘을 만들어보세요. + 인덱스도
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647# max 구하는 것에서 if 연산자만 바꾸면 바로 최솟값 가능v = [17, 92, 18, 33, 58, 7, 33, 42]def find_min(a):n = len(a) # n값 초기화min_nm = a[0] # min값 초기화for i in range(1, n):if min_nm > a[i]:min_nm = a[i]return min_nmfind_min(v) # 7# 그렇다면 인덱스 구하는 것도? 금방 가능# 아래는 복잡한 버전v = [17, 92, 18, 33, 58, 7, 33, 42]def find_min_idx(a):n = len(a) # n값 초기화min_nm = a[0] # min값 초기화for i in range(1, n):if min_nm > a[i]:min_nm = a[i]return ifind_min(v) # 7의 인덱스인 5# 이게 심플한 버전v = [17, 92, 18, 33, 58, 7, 33, 42]def find_min_idx(a):n = len(a) # n값 초기화idx = 0 # idx값 초기화for i in range(1, n):if a[i] < a[idx]:idx = ireturn idxfind_min_idx(v) # 7의 인덱스인 5cs 'Python > 알고리즘 연습' 카테고리의 다른 글
4. 팩토리얼 구하기 - 재귀 호출의 등장 (2) 2024.07.12 3. 동명이인 찾기 ① (0) 2024.07.11 1. 1부터 n까지의 합 구하기 (1) 2024.07.09