문제링크 : https://www.acmicpc.net/problem/11399
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int N;
vector<int> p;
int main(){
// freopen("../input.txt","rt",stdin);
scanf("%d",&N);
int tmp;
for(int i=0; i<N; i++){
scanf("%d",&tmp);
p.push_back(tmp);
}
sort(p.begin(), p.end());
// 부분합을 만들어 이전 사람들까지 인출할때 걸렸던 모든 시간을 저장한다.
int pSum = 0;
int res = 0;
for(int i=0; i<N; i++){
pSum += p[i];
res += pSum;
}
printf("%d\n",res);
return 0;
}
사실 아직 그리디 알고리즘은 당장 눈앞에 보이는 최적의 상황만을 쫓는 알고리즘이다. 아직 깊이 와닿지는 않지만 그럼에도 잘 공부해봐야겠다.