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 |