리스트 최대 최소 2

2022. 10. 25. 15:09파이썬(Python)

반응형

Q) 가장 왼쪽에 있는 최댓값

- n개의 숫자 입력

- 최댓값 위치를 출력

- 최댓값이 여러 개면 가장 왼쪽에 있는 최댓값 위치 출력

- 구한 최댓값의 위치보다 왼쪽에 있는 숫자들 중 최댓값 위치 출력

- 첫 번째 원소가 최댓값이 되어 1을 출력하면 프로그램 종료

 

n=int(input())
arr=list(map(int,input().split()))

arr2=[1]
j=0
for i in range(1,n):
    if arr[i]>arr[arr2[j]-1]:
        arr2.append(i+1)
        j+=1

for i in arr2[::-1]:
    print(i,end=' ')

- 거꾸로 생각해보기

- 입력한 수들을 하나씩 비교하여 최댓값 갱신하는 문제와 같음

- arr2 : 답이 될 리스트 (마지막 출력 시 거꾸로 출력)

- 최댓값을 찾을 때마다 arr2에 값의 위치를 삽입

- arr2의 첫 번째 원소는 1 (1로 끝나야 프로그램이 종료되기 때문)

- 입력한 수의 리스트인 arr에서 index가 1부터 n-1까지 탐색.

- arr [arr2 [j]-1] : for를 실행하면서 현재 arr의 최댓값

- 최댓값이 갱신되면 arr2에 index+1을 넣고 arr2의 index인 j를 1 증가하여 arr의 최댓값을 갱신

- 최댓값 위치를 arr2에 모두 삽입 후, reverse 하여 출력

 

결과

>> 5
>> 1 3 3 5 5
4 2 1

Q) 숫자 근처의 수

- 자연수 n을 입력

- 10개의 자연수를 입력 (자연수의 범위 1부터 1000)

- n보다 작은 수 중 가장 큰 수를 a

n 보다 큰 수 중 가장 작은 수를 b

- a와 b를 출력

- 만약 10개의 수 중 n보다 작은 수가 없으면 a는 -1 출력

- n보다 큰 수가 없으면 b는 -1 출력

 

n=int(input())
arr=list(map(int,input().split()))
a,b=0,1001
for i in arr:
    if i<n and i>a:
        a=i
    elif i>n and i<b:
        b=i

if a==0:
    a=-1
if b==1001:
    b=-1

print(a,b)

- arr의 원소들을 순회하며 각 조건에 맞게 a 또는 b를 갱신.

- 조건 1 : n보다 작고 a보다 크면 a를 갱신

- 조건 2 : n보다 크고 b보다 작으면 b를 갱신

- a 또는 b가 갱신되지 않으면 -1로 갱신

 

결과

>> 100
>> 56 78 159 462 320 11 47 896 32 60
78 159
>> 100
>> 12 59 46 78 33 22 69 10 2 99
99 -1

Q) 최대 이익

- n 년 간의 물품의 가격 정보가 주어진다.

- 물품을 단 한 번 구매하여 팔 때 이익을 최대화하여 최대 이익을 출력

- 물품을 사기 전 팔 수는 없다.

 

n=int(input())
arr=list(map(int,input().split()))

min_val=arr[0]
ans=0
for i in range(1,n):
    ans=max(arr[i]-min_val,ans)
    min_val=min(arr[i],min_val)
print(ans)

- 최대 이익을 내기 위해서는 최소 가격에 구매하고 최대 가격일 때 팔아야 한다.

- index가 i인 arr [i]최소 구매 가격인 경우 index가 i+1부터 판매 가능

- min_val : 최소 가격 (구매하기 위한 가격). 초기값은 arr [0]

- ans : 최대 이익 (답이 되는 변수). 초기값은 0

- arr [i] - min_val : 양수면 이익, 음수면 손해

- ans와 비교하여 ans보다 크면 ans를 arr [i]-min_val로 갱신

- arr [i]이 min_val보다 작으면 구매 가격이 최소화되므로 최대 이익을 만들 수 있으므로 min_val을 arr [i]로 갱신

 

결과

>> 5
>> 9 10 2 3 6
4

# 2에서 구매하여 6에서 팔면 최대 이익이 4가 나온다.
>> 5
>> 5 4 3 2 1
0

# 어느 시점에 구매를 해도 팔 때 손해가 나므로 이익이 생길 수 없다

Q) 두 숫자의 차이

- n개의 숫자를 오름차순으로 입력 (n은 2 이상)

- 두 수의 차최대일 때와 최소일 때를 출력

 

n=int(input())
arr=list(map(int,input().split()))

max_val=arr[n-1]-arr[0]
min_val=arr[1]-arr[0]
for i in range(2,n):
    if arr[i]-arr[i-1]:
        min_val=min(min_val,arr[i]-arr[i-1])

print(max_val,min_val)

- max_val : 두 수의 차이가 최대

- min_val : 두 수의 차이가 최소

- 오름차순이기 때문에 최대일 때는 양 끝의 수의 차이가 된다.

- 오름차순이기 때문에 최소일 때는 인접한 수의 차이가 되므로 인접한 두 수의 차이 값들 중 최솟값이 된다.

 

결과

>> 5
>> 6 15 23 46 87
81 8

 

 

 

 

'파이썬(Python)' 카테고리의 다른 글

2차원 배열 활용  (0) 2022.10.28
2차원 배열  (0) 2022.10.26
리스트 최대, 최소  (0) 2022.10.23
리스트 탐색  (0) 2022.10.22
Count 리스트  (0) 2022.10.15