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)