SW Expert Academy- 백만장자 프로젝트
문제 링크
문제 입력
3
3
10 7 6
3
3 5 9
5
1 1 3 1 2
#1 0
#2 10
#3 5
문제 풀이
import sys
"""
[입력]
T
N
a: (n개) 각 날의 매매가
[주의]
- 1 2 3 이면 1, 2 일날 사서 3일날 되팔면 2 + 1 로 3의 이익
1 1 3 1 2 와 같은 경우는 어떻게 해결?
만약 prev_ai 가 ai 보다 작으면 prev_ai 를 산다.
prev_ai가 더 크다면 prev_ai 를 사면 안된다.
만약 그것보다 큰 것이 나오면 사는데 이러면 걸리는 예시가 3 5 9 이군.
"""
sys.stdin = open('input.txt', 'rt')
T = int(input())
for t in range(T):
n = int(input())
a = list(map(int, input().split()))
ans = 0 # 총 판매액
max_ = a[-1] # 일자들 중 제일 큰 값
for i in reversed(range(n)):
# 만약 현재 금액이 max 보다 크다면 max가 갱신된다.
if a[i] > max_:
max_ = a[i]
# max에서 팔아야하므로 차를 구한다.
ans += max_ - a[i]
print(f"#{t + 1} {ans}")
뒤에서부터 배열을 알아보는 것이 관건입니다.
만약 현재가 max 보다 크다면 갱신을 해줘야 합니다. 왜냐하면 앞선 값들은 해당 max 에서 판매를 해야하기 때문입니다.
# SW Expert 백만장자프로젝트 파이썬 python 풀이
728x90
'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > SW Expert Academy' 카테고리의 다른 글
[SW11315] 오목 판정 (0) | 2022.05.23 |
---|---|
[SW11387] 몬스터 사냥 (0) | 2022.05.23 |
[SW11445] 무한 사전 (0) | 2022.05.23 |
[SW11688] Calkin-Wilf tree 1 (0) | 2022.05.21 |
[SW11736] 평범한 숫자 (0) | 2022.05.21 |