정화 코딩

[C++] 주식 (백준 11501번) 본문

PS

[C++] 주식 (백준 11501번)

jungh150c 2025. 3. 15. 02:45

https://www.acmicpc.net/problem/11501

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int t;
    cin >> t;

    while (t--) {
        int n;
        cin >> n;

        vector<int> a(n);
        for (int i = 0; i < n; i++) cin >> a[i];

        vector<int> b(n);
        for (int i = 0; i < n; i++) b[i] = a[i];

        int idx = n - 1;
        for (int i = n - 1; i >= 0; i--) {
            if (a[i] >= a[idx]) idx = i;
            b[i] = a[idx];
        }

        long long ans = 0;
        for (int i = 0; i < n; i++) {
            ans += (b[i] - a[i]);
        }

        cout << ans << '\n';
    }
}

보자마자 백준 2493번 탑 문제가 생각났다. 탑은 스택 문제고 이건 아니긴 한데... 그냥 상황이 비슷하달까... 탑 문제에 대한 설명은 여기에.

오른쪽에서부터 쭉 보면서 새롭게 만나는 최댓값을 새로운 배열 b에 저장해주었다. 배열 b에 저장되는 값들이 해당 시점에 산 주식의 최고점이 되는 셈이다. a[i]를 사서 b[i]에 파는 것 생각해서 전부 더해 답을 구하면 된다. (AC)

 

Comments