[SWEA] 1859 백만 장자 프로젝트 (C++)

우리누리·2023년 11월 12일
0

👓 문제 설명


25년 간의 수행 끝에 원재는 미래를 보는 능력을 갖게 되었다. 이 능력으로 원재는 사재기를 하려고 한다.
다만 당국의 감시가 심해 한 번에 많은 양을 사재기 할 수 없다.
다음과 같은 조건 하에서 사재기를 하여 최대한의 이득을 얻도록 도와주자.
1. 원재는 연속된 N일 동안의 물건의 매매가를 예측하여 알고 있다.
2. 당국의 감시망에 걸리지 않기 위해 하루에 최대 1만큼 구입할 수 있다.
3. 판매는 얼마든지 할 수 있다.
예를 들어 3일 동안의 매매가가 1, 2, 3 이라면 처음 두 날에 원료를 구매하여 마지막 날에 팔면 3의 이익을 얻을 수 있다.


🚨 접근 방법

맨 뒤 원소부터 한칸씩 앞으로 탐색을 진행한다. (현재 max는 맨 뒤 원소)
현재 max보다 값이 작거나 같은 경우 answer에 그 차이를 저장한다.
현재 max보다 값이 큰 경우 max를 갱신한다.


🚈 풀이

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
 
int main(int argc, char** argv)
{
    int test_case;
    int T,n,num;
    cin>>T;
 
    for(test_case = 1; test_case <= T; ++test_case)
    {
        cin>>n;
        vector<int>v;
        long long answer=0;
        for(int i=0;i<n;i++){
            cin>>num;
            v.push_back(num);
        }
         
        int temp_max=v[n-1];
        for(int i=n-1;i>=0;i--){
            if(v[i]<=temp_max){
                answer+=(temp_max-v[i]);    
            }
            else{
                temp_max=v[i];
            }
        }
        cout<<"#"<<test_case<<" "<<answer<<"\n";
    }
    return 0;
}

0개의 댓글