https://www.acmicpc.net/problem/11501
11501번: 주식
입력의 첫 줄에는 테스트케이스 수를 나타내는 자연수 T가 주어진다. 각 테스트케이스 별로 첫 줄에는 날의 수를 나타내는 자연수 N(2 ≤ N ≤ 1,000,000)이 주어지고, 둘째 줄에는 날 별 주가를 나타
www.acmicpc.net

풀이
가장 최대로 수익을 얻으려면, 항상 고점에서 팔아야 한다.
max값이 나올 때까지 주식을 하나씩 사다가, max값이 나오면 그때 다 판다.
또, 남은 주식들 중 max값이 나올 때까지 주식을 하나씩 사다가 max값이 나오면 그때 다 판다.
처음에는 앞에서부터 팔려고 했으나, 남은 기간 중 max값을 구하기 어려워 뒤에서부터 시작했다.
만약 max값보다 가격이 낮다면, 그 주식을 mx값에 팔면 되고, 새로운 max값을 만나면 max값을 업데이트 하면 된다.
전체 코드
/*boj s2 11501 주식*/
#include <algorithm>
#include <iostream>
#define MAXN 10000005
using namespace std;
int T, N;
long long arr[MAXN];
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> T;
while (T--) {
cin >> N;
for (int i = 0; i < N; i++) {
cin >> arr[i];
}
long long ans = 0;
int mx = arr[N - 1];
for (int i = N - 1; i >= 0; i--) { // 뒤에서부터 접근,
if (mx < arr[i]) { // 내가 갖고 오던 max값보다 크면 바꾸기
mx = arr[i];
} else { // 내가 갖고 있는 max값에 주식 팔기
ans += (mx - arr[i]);
}
}
cout << ans << "\n";
}
}
'알고리즘' 카테고리의 다른 글
백준 g4 2295 세 수의 합 c++ (0) | 2024.02.16 |
---|---|
백준 s2 18870 좌표 압축 c++ (0) | 2024.02.15 |
백준 g5 2170 선 긋기 c++ (0) | 2024.01.26 |
백준 s2 1541 잃어버린 괄호 c++ (0) | 2024.01.25 |
백준 s4 11399 ATM c++ (0) | 2024.01.25 |