Algorithm/삼성 SW Expert
1859 - 백만 장자 프로젝트
48965
2024. 3. 20. 20:57
문제
- SW Expert Academy 참고
풀이
그리디 알고리즘 문제였다. 풀이를 하면서 주의할 점은 최대 이익이 int값의 범위를 초과할 수 있다는 점이다.
(대략 최대 100억)이 정답으로 나올 수 있기 때문에 long long 자료형을 함수의 반환값으로 지정하였다.
핵심 아이디어는 가격 벡터 탐색 시 뒤에서 부터 탐색하는 것이다. 미래의 날중 가장 높은 가격을 찾은 후 탐색 중 가격이 낮은 날이면 물건의 차익을 계산하고 총합을 반환하여 출력하였다.
#include<iostream>
#include<vector>
using namespace std;
int T,N;
vector<int> price;
long long getProfit(){
long long ans = 0;
int maxPrice = price.back();
for (int i = N - 2; i >= 0; i--) {
if (price[i] > maxPrice) {
maxPrice = price[i];
} else {
ans += (maxPrice - price[i]);
}
}
return ans;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin>>T;
for(int k=0;k<T;k++){
int t;
cin>>N;
for(int i=0;i<N;i++){
cin>>t;
price.push_back(t);
}
cout<<"#"<<k+1<<" "<<getProfit()<<"\n";
price.clear();
}
}