[SW1859] 백만장자 프로젝트
✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/SW Expert Academy

[SW1859] 백만장자 프로젝트

 

 SW Expert Academy- 백만장자 프로젝트 

문제 링크

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5LrsUaDxcDFAXc&categoryId=AV5LrsUaDxcDFAXc&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=2&pageSize=10&pageIndex=1 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

문제 입력

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