리스트 최대, 최소

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