2022. 10. 23. 22:54ㆍ파이썬(Python)
1. 리스트 최대 최소 구하기
1-1. for loop
- 최댓값 또는 최솟값의 변수를 정의. (최댓값 : max_val, 최솟값 : min_val)
- for loop를 사용하여 현재 값과 최대 또는 최소를 정의한 값과 비교를 하여 갱신
최댓값
arr=list(map(int,input().split()))
max_val=0
for i in arr:
if max_val<i:
max_val=i
print(max_val)
결과
>> 1 5 2 5 3 9
9
최솟값 구하기
arr=list(map(int,input().split()))
min_val=999999
for i in arr:
if min_val>i:
min_val=i
print(min_val)
결과
>> 1 5 2 5 3 9
1
1-2. 문제점
- 위의 코드처럼 max_val을 0으로 지정하면 리스트의 원소가 모두 음수일 때 최댓값이 0으로 구해진다.
- 또한 min_val을 x라는 수로 지정하면 리스트의 원소가 모두 x보다 클 때 최솟값이 x로 구해진다.
- 즉, 초기값을 어떠한 수로 세팅되어 의도와는 다르게 갱신이 전혀 일어나지 않는다.
최댓값 오류
arr=list(map(int,input().split()))
max_val=0
for i in arr:
if max_val<i:
max_val=i
print(max_val)
결과
>> -1 -6 -5 -8 -2 -9
0
최솟값 오류
arr=list(map(int,input().split()))
min_val=99
for i in arr:
if min_val>i:
min_val=i
print(min_val)
결과
>> 101 106 107 105 102
99
2. 문제점 해결
2-1. sys 사용
- sys.maxsize를 이용해 초기값을 정해준다.
- sys.maxsize : 정수의 최댓값
- 최댓값 구하기 : 초기값을 정수의 최솟값으로 지정.
- max_val = -sys.maxsize (-정수의 최댓값은 정수의 최솟값)
- 최솟값 구하기 : 초기값을 정수의 최댓값으로 지정
- min_val = sys.maxsize
최댓값 구하기
import sys
arr=list(map(int,input().split()))
max_val=-sys.maxsize
for i in arr:
if max_val<i:
max_val=i
print(max_val)
결과
>> -1 -6 -5 -8 -2 -9
-1
최솟값 구하기
import sys
arr=list(map(int,input().split()))
min_val=sys.maxsize
for i in arr:
if min_val>i:
min_val=i
print(min_val)
결과
>> 101 106 107 105 102
101
2-2. 첫 번째 원소를 초기값 지정
- max_val 또는 min_val의 초기값을 첫 번째 원소로 지정
- 원소를 비교하는 것을 두 번째 원소부터 진행
최댓값 구하기
arr=list(map(int,input().split()))
max_val=arr[0]
for i in arr[1:]:
if max_val<i:
max_val=i
print(max_val)
최솟값 구하기
arr=list(map(int,input().split()))
min_val=arr[0]
for i in arr[1:]:
if min_val>i:
min_val=i
print(min_val)
2-3. 함수 사용
- 최댓값 출력 : max()
- 최솟값 출력 : min()
최댓값 출력
arr=list(map(int,input().split()))
print(max(arr))
결과
>> 58 12 5 31 112 341 56 3 512 52
512
최솟값 출력
arr=list(map(int,input().split()))
print(min(arr))
결과
>> 58 12 5 31 112 341 56 3 512 52
3
Q) 최댓값 2개 찾기
- 여러 개의 숫자를 입력
- 숫자들 중 최댓값 2개를 찾아 내림차순으로 2개를 출력
arr=list(map(int,input().split()))
if arr[0]>arr[1]:
max1,max2=arr[0],arr[1]
else:
max1,max2=arr[1],arr[0]
for i in arr[2:]:
if i>max1:
max2=max1
max1=i
elif i>max2:
max2=i
print(max1,max2)
- max1 : 최댓값
- max2 : 두 번째로 큰 최댓값
- arr이 입력한 수들의 리스트일 때, arr [0]과 arr [1]의 크기를 비교하여 둘 중 더 큰 값을 max1, 작은 값을 max2에 넣는다.
- arr [2]부터 크기를 비교한다.
- i가 max1보다 클 때 : i가 제일 큰 값이 되므로 max1이 max2가 되고 max1이 i가 된다.
- i가 max2보다 클 때 : i는 max2보다 크고 max1보다 작으므로 두 번째로 큰 최댓값이다. 따라서 max2는 i로 갱신한다.
결과
>> 6 5 10 2 5 2 8 9 2 3
10 9
다른 풀이)
arr=list(map(int,input().split()))
arr.sort()
print(arr[-1],arr[-2])
- sort() 함수를 이용하여 오름차순으로 정렬한다
- 오름차순으로 정렬 시 맨 뒤에 있는 2개의 값이 각각 최댓값과 두 번째로 큰 최댓값이 된다.
Q) 중복되지 않는 숫자 중 최댓값
- 중복하여 등장하지 않는 숫자 중 최댓값을 출력
- 입력한 모든 수가 중복한다면 -1 출력
arr=list(map(int,input().split()))
max_val=max(arr)
count_list=[0 for _ in range(max_val+1)]
for i in arr:
count_list[i]+=1
ans=-1
for i in range(max_val,0,-1):
if count_list[i]==1:
ans=i
break
print(ans)
- max_val : 입력한 수들 중 최댓값
- count_list : 크기가 max_val+1인 모든 원소가 0인 리스트. arr의 빈도수를 계산하기 위한 용도
- count_list [2]이 3이면 arr에 2가 3번 등장
- arr를 순회하며 count_list에 값을 1 증가
- 답이 될 변수 ans를 -1로 지정
- count_list를 거꾸로 순회하며 값이 1일 때 index를 찾음. (count_list [i]가 1이면 i가 한 번 나왔으므로 중복되지 않음)
- ans에 index를 넣어 break를 한다. (최댓값을 구하기 때문에 나머지 수는 구할 필요 없음)
- count_list에 1이 없으면 모든 수가 중복된 것이므로 -1 출력
결과
>> 1 3 6 9 6 9 1
3
>> 1 6 6 1 2 2
-1
'파이썬(Python)' 카테고리의 다른 글
2차원 배열 (0) | 2022.10.26 |
---|---|
리스트 최대 최소 2 (0) | 2022.10.25 |
리스트 탐색 (0) | 2022.10.22 |
Count 리스트 (0) | 2022.10.15 |
리스트 만들기 (0) | 2022.10.14 |